home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / EDUCMATH / CURVEFIT.LZH / CURVEFIT.ARC / CURVEFIT.BAS < prev    next >
BASIC Source File  |  1988-07-30  |  59KB  |  1,002 lines

  1. 3 KEY OFF: REM Found Line for Crashing QB4 and TB1 Line 13180 calculating EXP
  2. 5 DEFDBL A,B,C,S,R,X,Y:MONITOR2$="Y"
  3. 6 DIM EQ$(25),RS(25),RS1$(25),RS$(25):GOSUB 55000
  4. 9 CLS:COLOR  7,0,0:PR$="░░░░░░░░░░":GOTO 36000
  5. 10 CLS:GOSUB 38000:PRINT"╔═══════════╦══════════════════════════════════════════════════════╦══════════╗";
  6. 11 PRINT"║ CURVEFIT  ║ Version 2.11-B JULY 29, 1988       by  Thomas S. Cox ║SHAREWARE ║";
  7. 12 PRINT"╠═══════════╩══════════════════════════════════════════════════════╩══════════╣";
  8. 13 PRINT"║ PURPOSE     This program performs a least squares curve fit on X, Y data.   ║";
  9. 14 PRINT"║             Curves for 25 equations are fitted.  Equation coefficients,     ║";
  10. 15 PRINT"║             Correlation Coefficient, and Best Fit are computed.  For any    ║";
  11. 16 PRINT"║             of the 25 equations, predictions for Y can be calculated.       ║";
  12. 17 PRINT"║                                                                             ║";
  13. 18 PRINT"║ REFERENCE   CURVE FITTING FOR PROGRAMMABLE CALCULATORS by William M. Kolb   ║";
  14. 19 PRINT"║             Published by: IMTEC  P. O. Box 1402  Bowie MD  20716            ║";
  15. 20 PRINT"║                                                                             ║";
  16. 21 PRINT"║ WARNING     A LINEARIZING  technique is applied to various equations so that║";
  17. 22 PRINT"║ and         the resulting equations are of the general form: Y=A=B*X        ║";
  18. 23 PRINT"║ DISCLAIMER  This means that sum of squares of errors in Y are not minimized,║";
  19. 24 PRINT"║             but the sum of squares of the linearized variable are minimized.║";
  20. 25 PRINT"║                                                                             ║";
  21. 26 PRINT"║             The Linear, Parabolic, Cubic and Hyperbolic equations are linear║";
  22. 27 PRINT"║             in the parameters so this reservation does not apply to those   ║";
  23. 28 PRINT"║             curves. Reservation applies to equations with LN, EXP or POWERS.║";
  24. 29 PRINT"║                                                                             ║";
  25. 30 PRINT"║ SHAREWARE   If you use and like this program a donation of $10 is requested.║";
  26. 31 PRINT"╚═════════════════════════════════════════════════════════════════════════════╝";
  27. 32 PRINT TAB(2);:INPUT"PRESS <ENTER> TO START PROGRAM EXECUTION";A$
  28. 33 CLS:GOSUB 38000:XQ=0
  29. 55 DIM X1$(255),Y1$(255),X$(255),Y$(255),X(255),Y(255),R(65),RR(25)
  30. 56 DIM RC(25),A(25),B(25),C(25):FOR I=1 TO 255:X$(I)="END":Y$(I)="END":NEXT I
  31. 110 IF XQ >0 THEN 1000 ELSE 115
  32. 115 CLS:GOSUB 38000:XQ=1
  33. 120 CLS:q1$="N":GOSUB 38000:PRINT "╔═══════════╦══════════════════════════════════════════════════════╦══════════╗";
  34. 130 PRINT "║ CURVEFIT  ║  Version 2.11-B  JULY 29, 1988    by  Thomas S. Cox  ║SHAREWARE ║";
  35. 131 PRINT "╠═══════════╩══════════╤═══════════════════════════════════════════╩══════════╣";
  36. 132 PRINT "║ QUICK BASIC 3.0 VERS │          M  A  S  T  E  R     M  E  N  U             ║";
  37. 134 PRINT "╠═══════════╦══════════╪══════════════════════════════════════════════════════╣";
  38. 135 PRINT "║  SELECT   ║ CHOICES  │ BRIEF DESCRIPTION OF CHOICES                         ║";
  39. 140 PRINT "╠═══════════╬══════════╪══════════════════════════════════════════════════════╣";
  40. 150 PRINT "║      F1[ ]║ ENTER    │ New Data (X and Y values)                            ║";
  41. 160 PRINT "║      F2[ ]║ LOAD     │ A Previously Stored Data File                        ║";
  42. 170 PRINT "║      F3[ ]║ ADD      │ Data to Values of X and Y Currently in Memory        ║";
  43. 180 PRINT "║      F4[ ]║ DELETE   │ or CHANGE Values of X and Y Currently in Memory      ║";
  44. 190 PRINT "║      F5[ ]║ LIST     │ X and Y Values Currently in Memory                   ║";
  45. 200 PRINT "║      F6[ ]║ CALCULATE│ Equation Coefficients (A, B, C, and R^2)             ║";
  46. 210 PRINT "║      F7[ ]║ PREDICT  │ Value of Y, given Value of X                         ║";
  47. 220 PRINT "║      F8[ ]║ SHOW     │ LIST of EQUATIONS Fitted Using this Program          ║";
  48. 230 PRINT "║      F9[ ]║ REVIEW   │ Equation Coefficients (A, B, C, R^2)                 ║";
  49. 240 PRINT "║     F10[ ]║ DISPLAY  │ List of SUMS and SUMS of SQUARES                     ║";
  50. 250 PRINT "║ SHFT F1[ ]║ STORE    │ X and Y Data Points to a DISK FILE                   ║";
  51. 260 PRINT "║ SHFT F2[ ]║ EXIT     │ Leave Program and EXIT to DOS                        ║";
  52. 261 PRINT "║ SHFT F3[ ]║ BEST FIT │ Sorted by R² (Coefficients MUST have been calculated)║";
  53. 265 PRINT "║ SHFT F4[ ]║ MONITOR  │ Select COLOR or MONOCHROME (Default is COLOR + HERC) ║";
  54. 270 PRINT "╠═══════════╩══════════╧══════════════════════════════════════════════════════╣";
  55. 274 PRINT "║ Use UP or DOWN Keys to Select, Press ENTER; or FUNCTION KEY.  <ESC> to EXIT ║";
  56. 280 PRINT "╚═════════════════════════════════════════════════════════════════════════════╝";
  57. 284 LP=0 :LOCATE 25,1:COLOR 0,7,0:PRINT " Last Active File Used by CURVEFIT Was:  ";LEFT$(A4$,30);:GOSUB 38000
  58. 285 D1=8:GOTO 63500
  59. 1000 CLS: GOSUB 38000:PRINT "DATA ENTRY ROUTINE": PRINT " "
  60. 1001 INPUT"This routine will overwrite any existing data.  OK to proceed (Y) or (N)";A1$
  61. 1002 IF LEFT$(A1$,1)="Y" OR LEFT$(A1$,1)="y" THEN 1006
  62. 1003 IF LEFT$(A1$,1)="N" OR LEFT$(A1$,1)="n" THEN 120
  63. 1004 GOTO 120
  64. 1006 FOR I=1 TO 255:X$(I)="END":Y$(I)="END":NEXT I:PRINT"ALL VALUES HAVE BEEN SET TO ZERO"
  65. 1007 FOR I=1 TO 25:A(I)=0:B(I)=0:C(I)=0:R(I)=0:RR(I)=0:NEXT I
  66. 1008 INPUT "Do you want to have INPUT data listed on printer (Y or N)";Q1$
  67. 1009 GOSUB 50000:CLS:GOSUB 38000:M=1
  68. 1010 PRINT "Enter (S)top for X or Y to terminate data entry."
  69. 1011 CLS:GOSUB 38000:M=1:MR=1:MC=1
  70. 1012 PRINT "╔═══════════╦═══════════════════════════════════════════════════════╦═════════╗"
  71. 1013 PRINT "║ CURVEFIT  ║  Version 2.11-B  JULY 29, 1988      by Thomas S. Cox  ║SHAREWARE║"
  72. 1014 PRINT "╠═══════════╩═══════════════════════════════════════════════════════╩═════════╣"
  73. 1015 PRINT "║ DATA ENTRY SCREEN|  Press <ESC> at X or Y entry to Terminate Data Entry     ║"
  74. 1016 PRINT "╟───┬──────────┬──────────┬───┬──────────┬──────────┬───┬──────────┬──────────╢"
  75. 1017 PRINT "║PT#│ X VALUE  │ Y VALUE  │PT#│ X VALUE  │ Y VALUE  │PT#│ X VALUE  │ Y VALUE  ║"
  76. 1018 PRINT "╟───┼──────────┼──────────┼───┼──────────┼──────────┼───┼──────────┼──────────╢"
  77. 1019 FOR I=1 TO 14:PRINT "║   │          │          │   │          │          │   │          │          ║"
  78. 1020 NEXT I
  79. 1033 PRINT "╠═══╧════════╦═╧═════════╦╧═══╧══╦═══════╧═════╦════╧══╦╧══════════╧══════════╣"
  80. 1034 PRINT "║ ENTER DATA ║PT #       ║X VALUE║             ║Y VALUE║                      ║"
  81. 1035 PRINT "╚════════════╩═══════════╩═══════╩═════════════╩═══════╩══════════════════════╝";
  82. 1036 FOR J=1 TO 255
  83. 1037 LOCATE 7+MR,MC+1:PRINT LEFT$(PR$,3);:LOCATE 7+MR,MC+5:PRINT PR$;:LOCATE 7+MR,MC+16:PRINT PR$;
  84. 1040 LOCATE 23,21:PRINT "     ";:LOCATE 23,21:PRINT USING "####";M;
  85. 1042 LOCATE 23,36:PRINT"░░░░░░░░░░░ ";:LOCATE 23,36,1,0,7:GOSUB 1900:IF IPD$=CHR$(27) OR IPD$="s" OR IPD$="S" THEN GOTO 120 ELSE PRINT IPD$;:INPUT"", X$(M):X$(M)=IPD$+X$(M):LOCATE 23,36:PRINT"            ";:LOCATE 23,36:PRINT "  "+X$(M);
  86. 1044 LOCATE 23,58:PRINT"░░░░░░░░░░░ ";:LOCATE 23,58,1,0,7:GOSUB 1900:IF IPD$=CHR$(27) OR IPD$="s" OR IPD$="S" THEN GOTO 120 ELSE PRINT IPD$;:INPUT"", Y$(M):Y$(M)=IPD$+Y$(M):LOCATE 23,58:PRINT"            ";:LOCATE 23,58:PRINT "  "+Y$(M);
  87. 1046 LOCATE 7+MR,MC+1:PRINT USING "###";M;
  88. 1047 IF X$(M)="" THEN X$(M)="DEL"
  89. 1048 IF Y$(M)="" THEN Y$(M)="DEL"
  90. 1049 LOCATE 7+MR,MC+5:XX1=VAL(X$(M)):IF X$(M)="DEL" THEN PRINT"       DEL"; ELSE GOSUB 4780:PRINT USING C5$;XX1;
  91. 1050 LOCATE 7+MR,MC+16:YY1=VAL(Y$(M)):IF Y$(M)="DEL" THEN PRINT"       DEL"; ELSE GOSUB 4790:PRINT USING C5$;YY1;
  92. 1051 MR=MR+1
  93. 1052 IF M MOD 14=0 THEN MR=1:MC=MC+26
  94. 1053 IF M MOD 42=0 THEN MR=1:MC=1
  95. 1054 IF LEFT$(X$(J),1)="S" OR LEFT$(X$(J),1)="s" OR LEFT$(Y$(M),1)="S" OR LEFT$(Y$(M),1)="s" THEN GOTO 1500
  96. 1075 IF LP=1 THEN LPRINT"X( ";J;" )= ";X$(J);TAB(40);"Y( ";J;" )= ";Y$(J)
  97. 1077 M=M+1
  98. 1080 NEXT J
  99. 1090 GOTO 120
  100. 1500 X$(J)="END":Y$(J)="END":LOCATE 25,1:PRINT"(S)top encountered.  More Data (Y or N).";:INPUT;A$
  101. 1510 IF A$ = "Y" OR A$ = "y" THEN MR=MR-1:LOCATE 25,1:PRINT"                                                    ";:GOTO 1040
  102. 1520 GOTO 4620
  103. 1900 IPD$=INKEY$:IF IPD$=""THEN 1900 ELSE RETURN
  104. 2000 CLS:GOSUB 38000:PRINT"DATA ADDITION ROUTINE":PRINT" "
  105. 2011 CLS:GOSUB 38000:M=1:MR=1:MC=1:MR2=0
  106. 2012 PRINT "╔═══════════╦═══════════════════════════════════════════════════════╦═════════╗"
  107. 2013 PRINT "║ CURVEFIT  ║  Version 2.11-B  JULY 29, 1988      by Thomas S. Cox  ║SHAREWARE║"
  108. 2014 PRINT "╠═══════════╩═══════════════════════════════════════════════════════╩═════════╣"
  109. 2015 PRINT "║ DATA ADDITION| Press <ESC> for X or Y to Terminate Data Entry               ║"
  110. 2016 PRINT "╟───┬──────────┬──────────┬───┬──────────┬──────────┬───┬──────────┬──────────╢"
  111. 2017 PRINT "║PT#│ X VALUE  │ Y VALUE  │PT#│ X VALUE  │ Y VALUE  │PT#│ X VALUE  │ Y VALUE  ║"
  112. 2018 PRINT "╟───┼──────────┼──────────┼───┼──────────┼──────────┼───┼──────────┼──────────╢"
  113. 2019 FOR I=1 TO 14:PRINT "║   │          │          │   │          │          │   │          │          ║"
  114. 2020 NEXT I
  115. 2033 PRINT "╠═══╧════════╦═╧═════════╦╧═══╧══╦═══════╧═════╦════╧══╦╧══════════╧══════════╣"
  116. 2034 PRINT "║ ENTER DATA ║PT #       ║X VALUE║             ║Y VALUE║                      ║"
  117. 2035 PRINT "╚════════════╩═══════════╩═══════╩═════════════╩═══════╩══════════════════════╝";
  118. 2036 QZ=1:GOSUB 3470:QZ=0:FOR J=1 TO 255: REM This routine shows data to 2 decimal places
  119. 2037 IF X$(M)<>"END" OR Y$(M)<>"END"  THEN 2045
  120. 2038 LOCATE 7+MR,MC+1:PRINT LEFT$(PR$,3);:LOCATE 7+MR,MC+5:PRINT PR$;:LOCATE 7+MR,MC+16:PRINT PR$;
  121. 2040 LOCATE 23,21:PRINT "     ";:LOCATE 23,21:PRINT USING "#####";M;
  122. 2042 LOCATE 23,36:PRINT"░░░░░░░░░░░ ";:LOCATE 23,36,1,0,7:GOSUB 1900:IF IPD$=CHR$(27) OR IPD$="s" OR IPD$="S" THEN GOTO 120 ELSE PRINT IPD$;:INPUT"", X$(M):X$(M)=IPD$+X$(M):LOCATE 23,36:PRINT"            ";:LOCATE 23,36:PRINT "  "+X$(M);
  123. 2044 LOCATE 23,58:PRINT"░░░░░░░░░░░ ";:LOCATE 23,58,1,0,7:GOSUB 1900:IF IPD$=CHR$(27) OR IPD$="s" OR IPD$="S" THEN GOTO 120 ELSE PRINT IPD$;:INPUT"", Y$(M):Y$(M)=IPD$+Y$(M):LOCATE 23,58:PRINT"            ";:LOCATE 23,58:PRINT "  "+Y$(M);
  124. 2045 LOCATE 7+MR,MC+1:PRINT USING "###";M;
  125. 2046 IF X$(M)="" THEN X$(M)="DEL"
  126. 2047 IF Y$(M)="" THEN Y$(M)="DEL"
  127. 2048 LOCATE 7+MR,MC+5:XX1=VAL(X$(M)):IF X$(M)="DEL" THEN PRINT"       DEL"; ELSE GOSUB 4780:PRINT USING C5$;XX1;
  128. 2049 LOCATE 7+MR,MC+16:YY1=VAL(Y$(M)):IF Y$(M)="DEL" THEN PRINT"       DEL"; ELSE GOSUB 4790:PRINT USING C5$;YY1;
  129. 2050 MR=MR+1
  130. 2052 IF M MOD 14=0 THEN MR=1:MC=MC+26
  131. 2053 IF M MOD 42=0 THEN MR=1:MC=1:GOSUB 64000
  132. 2054 IF LEFT$(X$(M),1)="S" OR LEFT$(X$(M),1)="s" OR LEFT$(Y$(M),1)="S" OR LEFT$(Y$(M),1)="s" THEN GOTO 2500
  133. 2075 IF LP=1 THEN LPRINT"X( ";J;" )= ";X$(J);TAB(40);"Y( ";J;" )= ";Y$(J)
  134. 2077 M=M+1:IF MR>14 THEN MR=1:MC=MC+26:IF MC>55 THEN MC=1
  135. 2078 IF MR2=1 THEN 2038
  136. 2080 NEXT J
  137. 2090 GOTO 120
  138. 2500 X$(M)="END":Y$(M)="END":LOCATE 25,1:PRINT"(S)top encountered.  More Data (Y or N).";:INPUT;A$
  139. 2510 IF A$ = "Y" OR A$ = "y" THEN MR=MR-1:LOCATE 25,1:PRINT"                                                    ";:GOTO 2040
  140. 2520 GOTO 4620
  141. 3000 CLS:GOSUB 38000:PRINT"DATA CORRECTION":PRINT" "
  142. 3011 CLS:GOSUB 38000:M=1:MR=1:MC=1:MR2=0
  143. 3012 PRINT "╔═══════════╦═══════════════════════════════════════════════════════╦═════════╗"
  144. 3013 PRINT "║ CURVEFIT  ║  Version 2.11-B  JULY 29, 1988      by Thomas S. Cox  ║SHAREWARE║"
  145. 3014 PRINT "╠═══════════╩═══════════════════════════════════════════════════════╩═════════╣"
  146. 3015 PRINT "║ DATA CORRECTION| <ESC> for Data # to Exit, 'D' or 'd' for X or Y to Delete  ║"
  147. 3016 PRINT "╟───┬──────────┬──────────┬───┬──────────┬──────────┬───┬──────────┬──────────╢"
  148. 3017 PRINT "║PT#│ X VALUE  │ Y VALUE  │PT#│ X VALUE  │ Y VALUE  │PT#│ X VALUE  │ Y VALUE  ║"
  149. 3018 PRINT "╟───┼──────────┼──────────┼───┼──────────┼──────────┼───┼──────────┼──────────╢"
  150. 3019 FOR I=1 TO 14:PRINT "║   │          │          │   │          │          │   │          │          ║"
  151. 3020 NEXT I
  152. 3033 PRINT "╠═══╧════════╦═╧═════════╦╧═══╧══╦═══════╧═════╦════╧══╦╧══════════╧══════════╣"
  153. 3034 PRINT "║ ENTER DATA ║PT #       ║X VALUE║             ║Y VALUE║                      ║"
  154. 3035 PRINT "╚════════════╩═══════════╩═══════╩═════════════╩═══════╩══════════════════════╝";
  155. 3036 DUMMY$="           ":FOR J=1 TO 255: REM This routine shows data right justified
  156. 3037 LOCATE 7+MR,MC+1:PRINT LEFT$(PR$,3);:LOCATE 7+MR,MC+5:PRINT PR$;:LOCATE 7+MR,MC+16:PRINT PR$;
  157. 3038 IF X$(J)<>"END" OR Y$(J)<>"END" THEN 3045
  158. 3040 LOCATE 23,20:PRINT "░░░░░";:LOCATE 23,20:GOSUB 1900:IF IPD$=CHR$(27) THEN GOTO 120 ELSE print ipd$;:INPUT"",M1$:m1$=ipd$+m1$:m=val(m1$):LOCATE 23,20:PRINT USING "#####";M;
  159. 3041 LOCATE 23,36:PRINT"  ░░░░░░░░░ ";:LOCATE 23,36,1,0,7:INPUT;X$(M):IF LEFT$(X$(M),1)="d" OR LEFT$(X$(M),1)="D" THEN X$(M)="DEL":Y$(M)="DEL"
  160. 3042 LOCATE 23,36:PRINT"            ";:LOCATE 23,36:PRINT "  "+X$(M);
  161. 3043 LOCATE 23,58:PRINT"  ░░░░░░░░░ ";:LOCATE 23,58,1,0,7:INPUT;Y$(M):IF LEFT$(Y$(M),1)="d" OR LEFT$(Y$(M),1)="D" THEN Y$(M)="DEL"
  162. 3044 LOCATE 23,58:PRINT"            ";:LOCATE 23,58:PRINT"  "+Y$(M);:MR2=1
  163. 3045 LOCATE 7+MR,MC+1:PRINT USING "###";M;
  164. 3046 IF X$(M)="" THEN X$(M)="DEL"
  165. 3047 IF Y$(M)="" THEN Y$(M)="DEL"
  166. 3048 LOCATE 7+MR,MC+5:XX1=VAL(X$(M)):XX2=LEN(X$(M)):IF XX2<10 THEN P1$=LEFT$(DUMMY$,10-XX2)+X$(M) ELSE IF XX2>10 THEN P1$=RIGHT$(X$(M),10) ELSE P1$=LEFT$(X$(M),10)
  167. 3049 PRINT P1$;:LOCATE 7+MR,MC+16:YY1=VAL(Y$(M)):YY2=LEN(Y$(M)):IF YY2<10 THEN P2$=LEFT$(DUMMY$,10-YY2)+Y$(M) ELSE IF YY2>10 THEN P2$=RIGHT$(Y$(M),10) ELSE P2$=LEFT$(Y$(M),10)
  168. 3050 PRINT P2$:MR=MR+1
  169. 3052 IF M MOD 14=0 THEN MR=1:MC=MC+26
  170. 3053 IF M MOD 42=0 THEN MR=1:MC=1:GOSUB 64000
  171. 3054 IF LEFT$(X$(M),1)="S" OR LEFT$(X$(M),1)="s" OR LEFT$(Y$(M),1)="S" OR LEFT$(Y$(M),1)="s" THEN GOTO 3100
  172. 3075 IF LP=1 THEN LPRINT"X( ";J;" )= ";X$(J);TAB(40);"Y( ";J;" )= ";Y$(J)
  173. 3077 M=M+1:IF MR>14 THEN MR=1:MC=MC+26:IF MC>55 THEN MC=1
  174. 3078 IF MR2=1 THEN 3037
  175. 3080 NEXT J
  176. 3090 GOTO 120
  177. 3100 X$(M)="END":Y$(M)="END":LOCATE 25,1:PRINT"(S)top encountered.  More Data (Y or N).";:INPUT;A$
  178. 3110 IF A$ = "Y" OR A$ = "y" THEN MR=MR-1:LOCATE 25,1:PRINT"                                                    ";:GOTO 3040
  179. 3120 GOTO 3430
  180. 3430 CLS:PRINT "Rearranging Data for Deletions"
  181. 3470 K1=1
  182. 3480 FOR I= 1 TO 255
  183. 3490 X1$(I)=X$(I): Y1$(I)=Y$(I): NEXT I
  184. 3540 FOR I= 1 TO 255
  185. 3545 IF X1$(I)="DEL" OR Y1$(I)="DEL" THEN 3580
  186. 3550 IF X1$(I)<>"DEL"  THEN GOSUB 3587
  187. 3570 IF X1$(I)="END" THEN X$(K1)="END":Y$(K1)="END": GOTO 3582
  188. 3580 NEXT I
  189. 3582 FOR I= 1 TO 255: IF X$(I)="END" OR LEFT$(X$(I),1)="S" OR LEFT$(X$(I),1)="s" GOTO 3584
  190. 3583 NEXT I
  191. 3584 IF QZ=1 THEN RETURN ELSE PRINT "There are now "; I-1;" VALID data points. ":FOR I=1 TO 500:NEXT I:GOTO 3590
  192. 3587 X$(K1)=X1$(I): Y$(K1)=Y1$(I): K1=K1+1: RETURN
  193. 3590 Q7=0:IF QA=1 THEN QA=0:GOTO 20045
  194. 3591 IF DE=1 THEN DE=0:GOTO 7090
  195. 3592 IF QZ=1 THEN RETURN
  196. 3600 INPUT "LIST NEW DATA SET (Y/N) ";A2$
  197. 3610 IF A2$="Y" OR A2$= "y" GOTO 9005 ELSE 120
  198. 4000 CLS:GOSUB 38000: PRINT "CALCULATING SUMS AND SUMS OF SQUARES"
  199. 4010 QA=0
  200. 4020 GOTO 20000
  201. 4040 CLS:GOSUB 38000:IF X$(1)="END" OR Y$(1)="END" THEN PRINT "NO DATA ENTERED, CAN'T SHOW COEFFICIENTS!": PRINT CHR$(7): FOR I=1 TO 1000: NEXT I: GOTO 120
  202. 4220 MX=0
  203. 4230 FOR I=1 TO 25
  204. 4240 IF RC(I)>MX THEN 4250
  205. 4245 GOTO 4260
  206. 4250 MX=RC(I):MQ=I
  207. 4260 NEXT I
  208. 4265 IF R2=1 THEN R2=0 :RETURN
  209. 4500 PRINT CHR$(7):A1$="###":A2$="#.####^^^^":A3$="##.####":A0$="###.####"
  210. 4501 INPUT "Output Coefficients to Printer (Y or N) ";Q1$:INPUT "Output Coefficients to Screen (Y or N) ";SO$
  211. 4502 CLS:GOSUB 38000:GOSUB 50000:A5$="EQ#    COEF A      COEF B      COEF C       R^2    R^2 C   EQUATION"
  212. 4503 IF LEFT$(SO$,1)="Y" OR LEFT$(SO$,1)="y" THEN GOTO 4507
  213. 4505 IF LEFT$(Q1$,1)="Y" OR LEFT$(Q1$,1)="y" THEN 4550 ELSE 120
  214. 4507 PRINT "╔═══════════╦════════════════════════════════════╦════════════════════════════╗"
  215. 4508 PRINT "║ CURVEFIT  ║ LISTING OF CALCULATED COEFFICIENTS ║ BEST FIT EQUATION IS #     ║"
  216. 4509 PRINT "╠════╤══════╩═════╤════════════╤════════════╤════╩═╤══════╤═══════════════════╣"
  217. 4510 PRINT "║EQ #│ 'A' COEF.  │ 'B' COEF.  │ 'C' COEF.  │ R²   │R² COR│ EQUATION OF CURVE ║"
  218. 4511 PRINT "╟────┼────────────┼────────────┼────────────┼──────┼──────┼───────────────────╢"
  219. 4512 FOR I=1 TO 16:PRINT "║    │            │            │            │      │      │                   ║":NEXT I
  220. 4515 PRINT "╟────┼────────────┼────────────┼────────────┼──────┼──────┼───────────────────╢"
  221. 4516 PRINT "║BEST│            │            │            │      │      │                   ║"
  222. 4517 PRINT "╚════╧════════════╧════════════╧════════════╧══════╧══════╧═══════════════════╝";
  223. 4518 C1$="#.####":C2$="#######.####":C3$="###"
  224. 4520 LOCATE 2,75:PRINT MQ;
  225. 4522 LOCATE 23,7:GOSUB 4700:PRINT USING C2$;A(MQ);:LOCATE 23,20:GOSUB 4705:PRINT USING C2$;B(MQ);:LOCATE 23,33:GOSUB 4710:PRINT USING C2$;C(MQ);:LOCATE 23,46:PRINT USING C1$;RR(MQ);:LOCATE 23,53:PRINT USING C1$;RC(MQ);:LOCATE 23,60:PRINT EQ$(MQ);
  226. 4524 MR=6:
  227. 4526 FOR I=1 TO 16
  228. 4528 LOCATE MR,2:PRINT USING C3$;I;:LOCATE MR,7:GOSUB 4715:PRINT USING C2$;A(I):LOCATE MR,20:GOSUB 4720:PRINT USING C2$;B(I)::LOCATE MR,33:GOSUB 4725:PRINT USING C2$;C(I);
  229. 4529 LOCATE MR,46:PRINT USING C1$;RR(I);:LOCATE MR,53:PRINT USING C1$;RC(I);:LOCATE MR,60:PRINT EQ$(I);
  230. 4530 MR=MR+1
  231. 4531 NEXT I
  232. 4532 LOCATE 25,1:INPUT;"PLEASE PRESS <ENTER> TO SEE THE REMAINING EQUATION COEFFICIENTS ";AA$:LOCATE 25,1:PRINT STRING$(78," ");
  233. 4534 MR=6
  234. 4536 FOR I=1 TO 16
  235. 4538 LOCATE MR,2:PRINT"    ";:LOCATE MR,7:PRINT "            ";:LOCATE MR,20:PRINT "            ";:LOCATE MR,33:PRINT "            ";:LOCATE MR,46:PRINT "      ";:LOCATE MR,53:PRINT "      ";:LOCATE MR,60:PRINT "                   ";
  236. 4540 MR=MR+1:NEXT I
  237. 4542 MR=6:FOR I=17 TO 25
  238. 4544 LOCATE MR,2:PRINT USING C3$;I;:LOCATE MR,7:GOSUB 4730:PRINT USING C2$;A(I);:LOCATE MR,20:GOSUB 4735:PRINT USING C2$;B(I);:LOCATE MR,33:GOSUB 4740:PRINT USING C2$;C(I);:LOCATE MR,46:PRINT USING C1$;RR(I);
  239. 4545 LOCATE MR,53:PRINT USING C1$;RC(I);:LOCATE MR,60:PRINT EQ$(I);
  240. 4546 MR=MR+1:NEXT I
  241. 4548 LOCATE 25,1:INPUT;"ALL EQUATIONS HAVE BEEN LISTED.  PRESS <ENTER> TO RETURN TO MAIN MENU ";AAA$
  242. 4550 IF LP=1 THEN 4574 ELSE 120
  243. 4574 LPRINT A5$:FOR I=1 TO 25
  244. 4575 IF A(I)=0 AND B(I)=0 THEN 4578
  245. 4576 IF LP=1 THEN LPRINT USING A1$;I;:LPRINT"  ";:LPRINT USING A2$;A(I);:LPRINT"  ";:LPRINT USING A2$;B(I);:LPRINT"  ";:LPRINT USING A2$;C(I);:LPRINT"  ";:LPRINT USING A3$;RR(I);:LPRINT USING A0$;RC(I);:LPRINT" ";:LPRINT EQ$(I)
  246. 4578 NEXT I
  247. 4605 IF LP=1 THEN LPRINT"BASED ON THE VALUE OF RC( )--BEST FITTING CURVE WAS NUMBER";MQ
  248. 4610 LOCATE 25,1:INPUT "PRESS <ENTER> to return to MAIN MENU                                        ";A$:CLS:GOSUB 38000
  249. 4620 IF LP=1 THEN LPRINT CHR$(12)
  250. 4630 GOTO 120
  251. 4700 IF A(MQ)>9999999.9999# OR A(MQ)<-999999.9999# OR ABS(A(MQ))<.0001 THEN C2$="##.#####^^^^" ELSE C2$="#######.####"
  252. 4701 IF A(MQ)=0 THEN C2$="#######.####"
  253. 4702 RETURN
  254. 4705 IF B(MQ)>9999999.9999# OR B(MQ)<-999999.9999# OR ABS(B(MQ))<.0001 THEN C2$="##.#####^^^^" ELSE C2$="#######.####"
  255. 4706 IF B(MQ)=0 THEN C2$="#######.####"
  256. 4707 RETURN
  257. 4710 IF C(MQ)>9999999.9999# OR C(MQ)<-999999.9999# OR ABS(C(MQ))<.0001 THEN C2$="##.#####^^^^" ELSE C2$="#######.####"
  258. 4711 IF C(MQ)=0 THEN C2$="#######.####"
  259. 4712 RETURN
  260. 4715 IF A(I)>9999999.9999# OR A(I)<-999999.9999# OR ABS(A(I))<.0001 THEN C2$="##.#####^^^^" ELSE C2$="#######.####"
  261. 4716 IF A(I)=0 THEN C2$="#######.####"
  262. 4717 RETURN
  263. 4720 IF B(I)>9999999.9999# OR B(I)<-999999.9999# OR ABS(B(I))<.0001 THEN C2$="##.#####^^^^" ELSE C2$="#######.####"
  264. 4721 IF B(I)=0 THEN C2$="#######.####"
  265. 4722 RETURN
  266. 4725 IF C(I)>9999999.9999# OR C(I)<-999999.9999# OR ABS(C(I))<.0001 THEN C2$="##.#####^^^^" ELSE C2$="#######.####"
  267. 4726 IF C(I)=0 THEN C2$="#######.####"
  268. 4727 RETURN
  269. 4730 IF A(I)>9999999.9999# OR A(I)<-999999.9999# OR ABS(A(I))<.0001 THEN C2$="##.#####^^^^" ELSE C2$="#######.####"
  270. 4731 IF A(I)=0 THEN C2$="#######.####"
  271. 4732 RETURN
  272. 4735 IF B(I)>9999999.9999# OR B(I)<-999999.9999# OR ABS(B(I))<.0001 THEN C2$="##.#####^^^^" ELSE C2$="#######.####"
  273. 4736 IF B(I)=0 THEN C2$="#######.####"
  274. 4737 RETURN
  275. 4740 IF C(I)>9999999.9999# OR C(I)<-999999.9999# OR ABS(C(I))<.0001 THEN C2$="##.#####^^^^" ELSE C2$="#######.####"
  276. 4741 IF C(I)=0 THEN C2$="#######.####"
  277. 4742 RETURN
  278. 4745 IF A(I)>99999999.9999# OR A(I)<-9999999.9999# OR ABS(A(I))<.0001 THEN C2$="##.######^^^^" ELSE C2$="########.####"
  279. 4746 IF A(I)=0 THEN C2$="#######.####"
  280. 4747 RETURN
  281. 4750 IF B(I)>99999999.9999# OR B(I)<-9999999.9999# OR ABS(B(I))<.0001 THEN C2$="##.######^^^^" ELSE C2$="########.####"
  282. 4751 IF B(I)=0 THEN C2$="#######.####"
  283. 4752 RETURN
  284. 4755 IF C(I)>99999999.9999# OR C(I)<-9999999.9999# OR ABS(C(I))<.0001 THEN C2$="##.######^^^^" ELSE C2$="########.####"
  285. 4756 IF C(I)=0 THEN C2$="#######.####"
  286. 4757 RETURN
  287. 4760 IF Y>9999999.9999# OR Y<-999999.9999# OR ABS(Y)<.0001 THEN C2$="##.#####^^^^" ELSE C2$="#######.####"
  288. 4761 IF Y=0 THEN C2$="#######.####"
  289. 4762 RETURN
  290. 4770 IF START >9999999.9999# OR START<-999999.9999# OR ABS(START)<.0001 THEN C2$="##.#####^^^^" ELSE C2$="#######.####"
  291. 4771 IF START=0 THEN C2$="#######.####"
  292. 4772 RETURN
  293. 4780 IF XX1>9999999.99# OR XX1<-999999.99# OR ABS(XX1)<.0001 THEN C5$="##.###^^^^" ELSE C5$="#######.##"
  294. 4781 IF XX1>-9999.9999# AND XX1<99999.9999# THEN C5$="#####.####"
  295. 4782 IF XX1=0 THEN C2$="#######.####"
  296. 4783 RETURN
  297. 4790 IF YY1>9999999.99# OR YY1<-999999.99# OR ABS(YY1)<.0001 THEN C5$="##.###^^^^" ELSE C5$="#######.##"
  298. 4791 IF YY1>-9999.9999# AND YY1<99999.9999# THEN C5$="#####.####"
  299. 4792 IF YY1=0 THEN C2$="#######.####"
  300. 4793 RETURN
  301. 4990 CLS:GOSUB 38000:AZ$=""
  302. 5000 K=0:L=0:IF AZ$="S" THEN INPUT "All data entered, press <Enter> to continue";A$
  303. 5002 AZ$="":Q1$="":Q1A$="":PF$="":PF1$="":CLS:GOSUB 38000:PRINT"Predicted Value of X, Given Value for Y. ":K=1
  304. 5003 CLOSE:LOCATE 25,1:INPUT "Quit and return to main menu or Predict (Q or P)";AZ$:CLS:GOSUB 38000
  305. 5004 CLS:GOSUB 38000:IF L=1 AND LP=1 THEN LPRINT CHR$(12) 
  306. 5005 IF LEFT$(AZ$,1)="q" OR LEFT$(AZ$,1)="Q" THEN 120
  307. 5006 INPUT "Output results to printer (Y or N) ";Q1$:INPUT "Output Predictions to a File (Y) or (N) ";Q1A$:IF LEFT$(Q1A$,1)="Y" OR LEFT$(Q1A$,1)="y" THEN GOTO 57000
  308. 5007 INIT=1:GOSUB 50000:CLS:GOSUB 38000
  309. 5008 PRINT "╔═══════════╦═════════════╤═════╤══════╤════════════════════════════╦═════════╗"
  310. 5009 PRINT "║ CURVEFIT  ║ PREDICTIONS │ EQ# │      │                            ║VER 2.11B║"
  311. 5010 PRINT "╠═══════╤═══╩═════════════╪═════╧╤═════╧═══════════╤══════╤═════════╩═════════╣"
  312. 5011 PRINT "║ START │                 │ STOP │                 │ STEP │                   ║"
  313. 5012 PRINT "╟───────┴────┬────────────┼──────┴─────┬───────────┴┬─────┴──────┬────────────╢"
  314. 5013 PRINT "║X-DATA ENTRY│PREDICTED Y │X-DATA ENTRY│PREDICTED Y │X-DATA ENTRY│PREDICTED Y ║"
  315. 5014 PRINT "╟────────────┼────────────┼────────────┼────────────┼────────────┼────────────╢"
  316. 5015 FOR I=1 TO 14:PRINT "║            │            │            │            │            │            ║":NEXT I
  317. 5029 PRINT "╟────────────┴───┬────────┴───────┬────┴───────────┬┴────────────┴──┬─────────╢"
  318. 5030 PRINT "║ Coefficients   │A=              │B=              │C=              │R²=      ║"
  319. 5031 PRINT "╚════════════════╧════════════════╧════════════════╧════════════════╧═════════╝";
  320. 5032 LOCATE 2,34:PRINT"▒▒▒▒▒▒";:LOCATE 2,34:INPUT;EQ:IF EQ=0 THEN EQ=MQ:LOCATE 2,34:PRINT MQ;:LOCATE 2,42:PRINT"BEST ";EQ$(MQ);:GOTO 5034
  321. 5033 LOCATE 2,34:PRINT"      ";:LOCATE 2,34:PRINT EQ;:IF EQ<0 OR EQ>25 THEN 5038 ELSE IF A(EQ)=0 AND B(EQ)=0 THEN 5043 ELSE LOCATE 2,42:PRINT "                           ";:LOCATE 2,42:PRINT EQ$(EQ);
  322. 5034 LOCATE 4,10:PRINT"▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒";:LOCATE 4,35:PRINT"▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒";:LOCATE 4,60:PRINT"▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒";
  323. 5035 LOCATE 4,10:PRINT"                ";:LOCATE 4,10:INPUT;START:LOCATE 4,10:PRINT"               ";:LOCATE 4,10:PRINT START;
  324. 5036 LOCATE 4,35:PRINT"                ";:LOCATE 4,35:INPUT;STP1:LOCATE 4,35:PRINT"               ";:LOCATE 4,35:PRINT STP1;
  325. 5037 LOCATE 4,60:PRINT"                ";:LOCATE 4,60:INPUT;STP2:LOCATE 4,60:PRINT"               ";:LOCATE 4,60:PRINT STP2;:IF STP2<=0 THEN 5039 ELSE 5053
  326. 5038 IF EQ<0 OR EQ>25 THEN LOCATE 2,42:PRINT "EQUATION";EQ;" IS UNDEFINED ";:GOTO 5032
  327. 5039 LOCATE 2,42:PRINT"STEP MUST BE POSITIVE      ";:GOTO 5032
  328. 5043 LOCATE 2,42:PRINT " A AND B = ZERO FOR EQ ";EQ;:GOTO 5032
  329. 5053 IF LP=1 THEN LPRINT"PREDICTIONS FOR EQUATION ";EQ$(EQ):LPRINT" "
  330. 5054 LOCATE 23,21:GOSUB 4745:PRINT USING C2$;A(EQ);:LOCATE 23,38:GOSUB 4750:PRINT USING C2$;B(EQ);:LOCATE 23,55:GOSUB 4755:PRINT USING C2$;C(EQ);:LOCATE 23,73:PRINT USING"#.####";RC(EQ);
  331. 5060 K=0:ON EQ GOTO 5100,5110,5120,5130,5140,5150,5160,5170,5180,5190,5200,5210,5220,5230,5240,5250,5260,5270,5280,5290,5300,5310,5320,5330,5340,5350
  332. 5100 Y=A(1)+B(1)*START:GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5100
  333. 5110 Y=B(2)*START:GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5110
  334. 5120 Y=1/(A(3)+B(3)*START):GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5120
  335. 5130 Y=A(4)+B(4)*START+C(4)/START:GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5130
  336. 5140 Y=A(5)+B(5)/START:GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5140
  337. 5150 Y=START/(A(6)*START+B(6)):GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5150
  338. 5160 Y=A(7)+B(7)/START+C(7)/(START*START):GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5160
  339. 5170 Y=A(8)+B(8)*START+C(8)*START*START:GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5170
  340. 5180 Y=A(9)*START+B(9)*START*START:GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5180
  341. 5190 Y=A(10)*START^B(10):GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5190
  342. 5200 Y=A(11)*B(11)^START:GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5200
  343. 5210 Y=A(12)*B(12)^(1/START):GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5210
  344. 5220 Y=A(13)*START^(B(13)*START):GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5220
  345. 5230 Y=A(14)*START^(B(14)/START):GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5230
  346. 5240 Y=A(15)*EXP(B(15)*START):GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5240
  347. 5250 Y=A(16)*EXP(B(16)/START):GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5250
  348. 5260 Y=A(17)+B(17)*LOG(START):GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5260
  349. 5270 Y=1/(A(18)+B(18)*LOG(START)):GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5270
  350. 5280 Y=A(19)*B(19)^START*START^C(19):GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5280
  351. 5290 Y=A(20)*B(20)^(1/START)*START^C(20):GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5290
  352. 5300 Y=A(21)*EXP(((START-B(21))^2)/C(21)):GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5300
  353. 5310 Y=A(22)*EXP((LOG(START)-B(22))^2/C(22)):GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5310
  354. 5320 Y=A(23)*START^B(23)*(1-START)^C(23):GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5320
  355. 5330 Y=A(24)*(START/B(24))^C(24)*EXP(START/B(24)):GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5330
  356. 5340 Y=1/(A(25)*(START+B(25))^2+C(25)):GOSUB 5500:START=START+STP2:IF START>STP1 THEN 5003 ELSE 5340
  357. 5350 REM * END OF Y PREDICTIONS *
  358. 5500 IF INIT =1 THEN M=1:MR=1:MC=1:MR1=1:MC1=1
  359. 5502 L=1:INIT=0
  360. 5503 IF LEFT$(Q1A$,1)="Y" OR LEFT$(Q1A$,1)="y" THEN PRINT #1, START,Y
  361. 5505 IF LP=1 THEN LPRINT"If X= ";START,"Then Y= ";Y
  362. 5506 LOCATE 7+MR,MC+1:GOSUB 4770:PRINT USING C2$;START;:LOCATE 7+MR,MC+14:GOSUB 4760:PRINT USING C2$;Y;
  363. 5507 MR=MR+1:IF M MOD 14=0 THEN MR=1:MC=MC+26
  364. 5508 IF M MOD 42 =0 THEN MR=1:MC=1:GOSUB 5600
  365. 5509 M=M+1
  366. 5511 IF LP=1 THEN 5515
  367. 5515 IF LP=1 AND (INT(M/60)=(M/60)) THEN LPRINT CHR$(12)
  368. 5520 RETURN
  369. 5600 LOCATE 25,1:PRINT"PLEASE PRESS <ENTER> FOR MORE DATA";:INPUT;A$:LOCATE 25,1:PRINT"                                                                       ";
  370. 5602 FOR I3 = 1 TO 42
  371. 5606 LOCATE 7+MR1,MC1+1:PRINT "            ";:LOCATE 7+MR1,MC1+14:PRINT "            ";
  372. 5607 MR1=MR1+1:IF I3 MOD 14=0 THEN MR1=1:MC1=MC1+26
  373. 5608 IF I3 MOD 42 =0 THEN MR1=1:MC1=1
  374. 5610 NEXT I3
  375. 5620 RETURN
  376. 6000 REM * STORE DATA ON DISK (RAW DATA ONLY) *
  377. 6030 CLS:PRINT "This routine will store RAW DATA on Disk"
  378. 6035 ON ERROR GOTO 63000
  379. 6040 INPUT "Please enter File Name for Data Storage ";A4$
  380. 6050 OPEN "O",1,A4$
  381. 6060 FOR I=1 TO 255
  382. 6065 IF X$(I)="END" AND Y$(I)="END" THEN CLOSE 1:GOTO 6080
  383. 6070 PRINT #1,X$(I),Y$(I):NEXT I:CLOSE 1
  384. 6080 PRINT "Data have been stored to disk with File Name ";A4$
  385. 6090 INPUT "Press <Enter> to return to MAIN MENU";Z0
  386. 6100 GOTO 120
  387. 7000 REM * LOAD DATA FROM DISK *
  388. 7030 CLS:PRINT"This routine will load DATA from Disk"
  389. 7035 ON ERROR GOTO 61000
  390. 7040 INPUT "PLEASE Enter File Name for Data ";A4$
  391. 7041 FOR I=1 TO 255:X$(I)="END":Y$(I)="END":NEXT I
  392. 7045 NX=0:NY=0:FOR I=1 TO 25:A(I)=0:B(I)=0:C(I)=0:R(I)=0:RC(I)=0:NEXT I
  393. 7050 OPEN "I",1,A4$
  394. 7060 FOR I=1 TO 255
  395. 7065 IF EOF(1) THEN PRINT"ALL DATA LOADED":K=I:FOR J=K TO 255:X$(J)="END":Y$(J)="END":NEXT J:GOTO 7075
  396. 7070 INPUT #1,X$(I)
  397. 7071 IF INSTR(2,X$(I)," ")<>0 THEN 7200
  398. 7073 INPUT #1,Y$(I):NEXT I
  399. 7075 CLOSE 1
  400. 7080 PRINT "Data loaded from file ";A4$
  401. 7082 FOR I=1 TO 255:IF X$(I)="" THEN X$(I)="DEL":Y$(I)="DEL"
  402. 7083 IF X$(I)="END" THEN IF X$(1)<>"DEL" THEN 7090 ELSE DE=1:GOTO 3430
  403. 7084 NEXT I:DE=1:GOTO 3430
  404. 7090 INPUT "Press ENTER to Continue";A9:GOTO 3430
  405. 7100 GOTO 120
  406. 7200 CLOSE 1:OPEN "I",1,A4$
  407. 7210 FOR I=1 TO 255
  408. 7220 IF EOF(1) THEN PRINT"ALL DATA LOADED":K=I:FOR J=K TO 255:X$(J)="END":Y$(J)="END":NEXT J:GOTO 7275
  409. 7230 INPUT #1,DUMM$
  410. 7240 PM=INSTR(2,DUMM$," "):X$(I)=LEFT$(DUMM$,PM):Y$(I)=RIGHT$(DUMM$,LEN(DUMM$)-PM):NEXT I
  411. 7275 GOTO 7075
  412. 8000 CLS:GOSUB 38000:PRINT"PROGRAM EXECUTION HAS BEEN TERMINATED"
  413. 8010 INPUT "Before exiting do you wish to store data on disk (Y or N)";A$
  414. 8020 IF LEFT$(A$,1)="N" OR LEFT$(A$,1)="n"  THEN END
  415. 8030 GOTO 6030
  416. 9000 REM * LIST RAW DATA *
  417. 9005 CLS:GOSUB 38000:PRINT "LIST OF DATA ENTERED"
  418. 9006 INPUT "Do you want to list data on printer (Y or N)";Q1$
  419. 9007 GOSUB 50000:GOTO 63700
  420. 9008 IF LP=1 THEN LPRINT"LISTING OF DATA":LPRINT" "
  421. 9009 IF LP=0 THEN 9100
  422. 9010 FOR I=1 TO 255
  423. 9020 IF X$(I)="END" OR Y$(I)="END" THEN LPRINT CHR$(12):GOTO 9100
  424. 9065 IF LP=1 THEN LPRINT"X( ";I;" )= ";X$(I);TAB(32);"Y( ";I;" )= ";Y$(I)
  425. 9066 IF LP=1 AND (INT(I/60)=(I/60)) THEN LPRINT CHR$(12)
  426. 9074 NEXT I:IF LP=1 THEN LPRINT CHR$(12)
  427. 9100 IF Q7=1 THEN  Q7=0:RETURN
  428. 9110 GOTO 120
  429. 10000 CLS:GOSUB 38000
  430. 10010 PRINT "╔═══════════════════════════════════════════════════════════════════════════╗"
  431. 10020 PRINT "║     LISTING of Equations Fitted with CURVEFIT Version 2.11-B  (7/29/88)   ║"
  432. 10030 PRINT "╟────────────────────────────────────┬──────────────────────────────────────╢"
  433. 10040 PRINT "║  1. Y=A+B*X       STR. LINE        │   2. Y=B*X           LINE THRU ORG.  ║"
  434. 10050 PRINT "║  3. Y=1/(A+B*X)   REC. STR LINE    │   4. Y=A+B*X+C/X     LIN AND RECIP.  ║"
  435. 10060 PRINT "║  5. Y=A+B/X       HYPERBOLA        │   6. Y=X/(A*X+B)     RECIP HYPERBOLA ║"
  436. 10070 PRINT "║  7. Y=A+B/X+C/X*X 2ND ORD HYP      │   8. Y=A+B*X+C*X*X   PARABOLA        ║"
  437. 10080 PRINT "║  9. Y=A*X+B*X*X   PAR AT ORIGIN    │  10. Y=A*X^B         POWER           ║"
  438. 10090 PRINT "║ 11. Y=A*B^X       MOD. POWER       │  12. Y=A*B^(1/X)     ROOT            ║"
  439. 10100 PRINT "║ 13. Y=A*X^(B*X)   SUPER GEOMET.    │  14. Y=A*X^(B/X)     MOD GEOMETRIC   ║"
  440. 10110 PRINT "║ 15. Y=A*e^(B*X)   EXPONENTIAL      │  16. Y=A*e^(B/X)     MOD EXPONENTIAL ║"
  441. 10120 PRINT "║ 17. Y=A+B*ln(X)   LOGARITHMIC      │  18. Y=1/(A+B*ln(X))   RECIP LOG     ║"
  442. 10130 PRINT "║ 19. Y=A*B^X*X^C   HOERL FUNCTION   │  20. Y=A*B^(1/X)*X^C   MOD HOERL     ║"
  443. 10140 PRINT "║ 21. Y=A*e^(((X-B)^2)/C)  NORMAL    │  22. Y=A*e^((ln(X)-B)^2/C) LOG NORMAL║"
  444. 10150 PRINT "║ 23. Y=A*X^B*(1-X)^C   BETA         │  24. Y=A*(X/B)^C*e^(X/B)   GAMMA     ║"
  445. 10160 PRINT "║ 25. Y=1/(A*(X+B)^2+C) CAUCHY       │                                      ║"
  446. 10170 PRINT "╟────────────────────────────────────┴──────────────────────────────────────╢"
  447. 10180 PRINT "║      NOTES:  A.  Values of X and Y may be positive, negative, or zero     ║"
  448. 10190 PRINT "║              B.  Only 255 values of X and Y can be used.                  ║"
  449. 10200 PRINT "╟───────────────────────────────────────────────────────────────────────────╢"
  450. 10210 PRINT "║      Press <RETURN> to continue program execution                         ║"
  451. 10220 PRINT "╚═══════════════════════════════════════════════════════════════════════════╝"
  452. 10230 A$=INKEY$:IF A$<>CHR$(13) THEN 10230 ELSE 10460
  453. 10460 IF R1=1 THEN RETURN ELSE 120
  454. 12000 FOR I=1 TO 25:A(I)=0:B(I)=0:C(I)=0:RR(I)=0:RC(I)=0:NEXT I
  455. 12005 REM * EQUATION 1 STRAIGHT LINE
  456. 12008 ON ERROR GOTO 62101
  457. 12010 A(1)=(R(17)*R(18)-R(16)*R(20))/(R(17)*R(21)-(R(16)*R(16)))
  458. 12020 B(1)=(R(20)*R(21)-R(16)*R(18))/(R(17)*R(21)-(R(16)*R(16)))
  459. 12030 RR(1)=(A(1)*R(18)+B(1)*R(20)-(R(18)*R(18))/R(21))/(R(19)-(R(18)*R(18))/R(21))
  460. 12040 RC(1)=1-(((1-RR(1))*(R(21)-1))/(R(21)-2))
  461. 12050 C(1)=0
  462. 12060 REM * EQUATION 2 STRAIGHT LINE THROUGH ORIGIN *
  463. 12061 A(2)=0:B(2)=R(20)/R(17):RR(2)=0:RC(2)=0:C(2)=0
  464. 12070 ON ERROR GOTO 62102: REM The rest of this routine supplied by J. Cargal
  465. 12071 SSTO=R(19)-((R(18)/R(21))*R(18)):REM R^2=MAX{0,1-(SSE/SSTO)}
  466. 12072 SSE=0: FOR I=1 TO R(21):SSE=SSE+(Y(I)-B(2)*X(I))^2:NEXT I
  467. 12080 RR(2)=1-SSE/SSTO:IF RR(2)<0 THEN RR(2)=0
  468. 12081 IF RR(2)>1 THEN RR(2)=1:RC(2)=1
  469. 12082 RC(2)=RR(2)
  470. 12140 REM * EQUATION 3 RECIPROCAL OF STRAIGHT LINE
  471. 12145 ON ERROR GOTO 62103
  472. 12150 A(3)=(R(17)*R(24)-R(16)*R(34))/(R(17)*R(21)-(R(16)*R(16)))
  473. 12160 B(3)=(R(21)*R(34)-R(16)*R(24))/(R(17)*R(21)-(R(16)*R(16)))
  474. 12170 RR(3)=(A(3)*R(24)+B(3)*R(34)-((R(24)*R(24))/R(21)))/(R(25)-(R(24)*R(24))/R(21))
  475. 12180 RC(3)=1-(((1-RR(3))*(R(21)-1))/(R(21)-2))
  476. 12190 C(3)=0
  477. 12200 REM * EQUATION 4  COMBINED LINEAR AND RECIPROCAL *
  478. 12201 ON ERROR GOTO 62104
  479. 12220 S1=R(17)*R(21)-(R(16)*R(16))
  480. 12230 S2=R(21)*R(35)-R(18)*R(22)
  481. 12240 S3=(R(21)*R(21))-R(16)*R(22)
  482. 12250 S4=R(20)*R(21)-R(16)*R(18)
  483. 12260 S5=R(21)*R(23)-(R(22)*R(22))
  484. 12270 C(4)=(S1*S2-S3*S4)/(S1*S5-(S3*S3))
  485. 12280 B(4)=(S4-S3*C(4))/S1
  486. 12290 A(4)=(R(18)-B(4)*R(16)-C(4)*R(22))/R(21)
  487. 12300 RR(4)=(A(4)*R(18)+B(4)*R(20)+C(4)*R(35)-(R(18)*R(18))/R(21))/(R(19)-(R(18)*R(18))/R(21))
  488. 12310 RC(4)=1-(((1-RR(4))*(R(21)-1))/(R(21)-3))
  489. 12320 REM * EQUATION 5  HYPERBOLA *
  490. 12321 ON ERROR GOTO 62105
  491. 12330 S1=R(21)*R(23)-(R(22)*R(22))
  492. 12340 A(5)=(R(18)*R(23)-R(22)*R(35))/S1
  493. 12360 B(5)=(R(21)*R(35)-R(18)*R(22))/S1
  494. 12370 RR(5)=(A(5)*R(18)+B(5)*R(35)-(R(18)*R(18))/R(21))/(R(19)-(R(18)*R(18))/R(21))
  495. 12380 RC(5)=1-(((1-RR(5))*(R(21)-1))/(R(21)-2))
  496. 12390 C(5)=0
  497. 12400 REM * EQUATION 6  RECIPROCAL OF A HYPERBOLA *
  498. 12401 ON ERROR GOTO 62106
  499. 12420 S1=R(21)*R(23)-(R(22)*R(22))
  500. 12430 A(6)=(R(23)*R(24)-R(22)*R(26))/S1
  501. 12440 B(6)=(R(21)*R(26)-R(22)*R(24))/S1
  502. 12450 RR(6)=(A(6)*R(24)+B(6)*R(26)-(R(24)*R(24))/R(21))/(R(25)-(R(24)*R(24))/R(21))
  503. 12460 RC(6)=1-(((1-RR(6))*(R(21)-1))/(R(21)-2))
  504. 12462 C(6)=0
  505. 12470 REM * EQUATION 7  SECOND ORDER HYPERBOLA *
  506. 12471 ON ERROR GOTO 62107
  507. 12490 S1=R(21)*R(23)-(R(22)*R(22))
  508. 12500 S2=R(21)*R(38)-R(18)*R(23)
  509. 12510 S3=R(21)*R(41)-R(22)*R(23)
  510. 12520 S4=R(21)*R(35)-R(18)*R(22)
  511. 12530 S5=R(21)*R(44)-(R(23)*R(23))
  512. 12535 IF (S1*S5-S3*S3)=0 THEN 12620
  513. 12540 C(7)=(S1*S2-S3*S4)/(S1*S5-(S3*S3))
  514. 12545 IF C(7)>=9.999999E+37 THEN A(7)=0:B(7)=0:C(7)=0:GOTO 12590
  515. 12550 B(7)=(S4-S3*C(7))/S1
  516. 12560 A(7)=(R(18)-C(7)*R(23)-B(7)*R(22))/R(21)
  517. 12570 RR(7)=(A(7)*R(18)+B(7)*R(35)+C(7)*R(38)-(R(18)*R(18))/R(21))/(R(19)-(R(18)*R(18))/R(21))
  518. 12580 RC(7)=1-(((1-RR(7))*(R(21)-1))/(R(21)-3))
  519. 12590 REM * EQUATION 8  PARABOLA *
  520. 12591 ON ERROR GOTO 62108
  521. 12620 S1=R(17)*R(21)-(R(16)*R(16))
  522. 12630 S2=R(21)*R(36)-R(17)*R(18)
  523. 12640 S3=R(21)*R(40)-R(16)*R(17)
  524. 12650 S4=R(20)*R(21)-R(16)*R(18)
  525. 12660 S5=R(21)*R(43)-(R(17)*R(17))
  526. 12670 C(8)=(S1*S2-S3*S4)/(S1*S5-(S3*S3))
  527. 12680 B(8)=(S4-S3*C(8))/S1
  528. 12690 A(8)=(R(18)-C(8)*R(17)-B(8)*R(16))/R(21)
  529. 12700 RR(8)=(A(8)*R(18)+B(8)*R(20)+C(8)*R(36)-(R(18)*R(18))/R(21))/(R(19)-(R(18)*R(18))/R(21))
  530. 12710 RC(8)=1-(((1-RR(8))*(R(21)-1))/(R(21)-3))
  531. 12720 REM * EQUATION 9  PARABOLA THROUGH ORIGIN *
  532. 12721 ON ERROR GOTO 62109
  533. 12750 S1=R(17)*R(43)-(R(40)*R(40))
  534. 12760 A(9)=(R(20)*R(43)-R(36)*R(40))/S1
  535. 12770 B(9)=(R(17)*R(36)-R(20)*R(40))/S1
  536. 12780 C(9)=0: RR(9)=0: RC(9)=0
  537. 12810 REM * EQUATION 10  POWER *
  538. 12811 ON ERROR GOTO 62110
  539. 12820 IF NX=1 OR NY=1 THEN 13000
  540. 12840 S1=R(21)*R(29)-(R(28)*R(28))
  541. 12850 S3=(R(29)*R(30)-R(28)*R(32))/S1
  542. 12860 A(10)=EXP((R(29)*R(30)-R(28)*R(32))/S1)
  543. 12870 B(10)=(R(21)*R(32)-R(28)*R(30))/S1
  544. 12875 RR(10)=(S3*R(30)+B(10)*R(32)-(R(30)*R(30))/R(21))/(R(31)-(R(30)*R(30))/R(21))
  545. 12880 IF RR(10)<0 OR RR(10)>1 THEN A(10)=0:B(10)=0:GOTO 13000
  546. 12890 RC(10)=1-(((1-RR(10))*(R(21)-1))/(R(21)-2))
  547. 12895 C(10)=0
  548. 13000 REM * EQUATION 11  MODIFIED POWER *
  549. 13001 ON ERROR GOTO 62111
  550. 13010 IF NY=1 THEN 13110
  551. 13020 S1=R(17)*R(21)-(R(16)*R(16))
  552. 13030 S2=(R(17)*R(30)-R(16)*R(46))/S1
  553. 13040 S3=(R(21)*R(46)-R(16)*R(30))/S1
  554. 13060 A(11)=EXP(S2)
  555. 13070 B(11)=EXP(S3)
  556. 13080 RR(11)=(S2*R(30)+S3*R(46)-(R(30)*R(30))/R(21))/(R(31)-(R(30)*R(30))/R(21))
  557. 13090 RC(11)=1-(((1-RR(11))*(R(21)-1))/(R(21)-2))
  558. 13100 C(11)=0
  559. 13110 REM * EQUATION 12  ROOT *
  560. 13111 ON ERROR GOTO 62112
  561. 13120 IF NY=1 THEN 13210
  562. 13140 S1=R(23)*R(21)-(R(22)*R(22))
  563. 13150 S2=(R(23)*R(30)-R(22)*R(47))/S1
  564. 13160 S3=(R(21)*R(47)-R(22)*R(30))/S1
  565. 13165 IF S2>87 OR S3>87 OR S2<-86 OR S3<-86 THEN 13210:REM Error trap to keep
  566. 13170 A(12)=EXP(S2):REM QB4 and TB1.1 from crashing and to prevent QB3 from
  567. 13180 B(12)=EXP(S3):REM giving erroneous results.  Added 4/4/88
  568. 13190 RR(12)=(S2*R(30)+S3*R(47)-(R(30)*R(30))/R(21))/(R(31)-(R(30)*R(30))/R(21))
  569. 13200 RC(12)=1-(((1-RR(12))*(R(21)-1))/(R(21)-2)):C(12)=0
  570. 13210 REM * EQUATION 13  SUPER GEOMETRIC *
  571. 13211 ON ERROR GOTO 62113
  572. 13220 IF NX=1 OR NY=1 THEN 13400
  573. 13240 S1=R(21)*R(49)-(R(48)*R(48))
  574. 13250 S2=(R(30)*R(49)-R(48)*R(50))/S1
  575. 13260 A(13)=EXP(S2)
  576. 13270 B(13)=(R(21)*R(50)-R(30)*R(48))/S1
  577. 13280 RR(13)=(S2*R(30)+B(13)*R(50)-(R(30)*R(30))/R(21))/(R(31)-(R(30)*R(30))/R(21))
  578. 13290 RC(13)=1-(((1-RR(13))*(R(21)-1))/(R(21)-2))
  579. 13295 C(13)=0
  580. 13300 REM * EQUATION 14  MODIFIED GEOMETRIC *
  581. 13301 ON ERROR GOTO 62114
  582. 13330 S1=R(21)*R(53)-(R(63)*R(63))
  583. 13340 S2=(R(30)*R(53)-R(63)*R(58))/S1
  584. 13350 A(14)=EXP(S2)
  585. 13360 B(14)=(R(21)*R(58)-R(30)*R(63))/S1
  586. 13370 RR(14)=(S2*R(30)+B(14)*R(58)-(R(30)*R(30))/R(21))/(R(31)-(R(30)*R(30))/R(21))
  587. 13380 RC(14)=1-(((1-RR(14))*(R(21)-1))/(R(21)-2))
  588. 13390 C(14)=0
  589. 13400 REM * EQUATION 15  EXPONENTIAL *
  590. 13401 ON ERROR GOTO 62115
  591. 13420 IF NY=1 THEN 13600
  592. 13430 S1=R(17)*R(21)-(R(16)*R(16))
  593. 13440 S2=(R(17)*R(30)-R(16)*R(46))/S1
  594. 13450 A(15)=EXP(S2)
  595. 13460 B(15)=(R(21)*R(46)-R(16)*R(30))/S1
  596. 13470 RR(15)=(S2*R(30)+R(46)*B(15)-(R(30)*R(30))/R(21))/(R(31)-(R(30)*R(30))/R(21))
  597. 13480 RC(15)=1-(((1-RR(15))*(R(21)-1))/(R(21)-2))
  598. 13490 C(15)=0
  599. 13500 REM * EQUATION 16  MODIFIED EXPONENTIAL *
  600. 13501 ON ERROR GOTO 62116
  601. 13530 S1=R(23)*R(21)-(R(22)*R(22))
  602. 13540 S2=(R(23)*R(30)-R(22)*R(47))/S1
  603. 13550 A(16)=EXP(S2)
  604. 13560 B(16)=(R(21)*R(47)-R(22)*R(30))/S1
  605. 13570 RR(16)=(S2*R(30)+B(16)*R(47)-(R(30)*R(30))/R(21))/(R(31)-(R(30)*R(30))/R(21))
  606. 13580 RC(16)=1-(((1-RR(16))*(R(21)-1))/(R(21)-2)):C(16)=0
  607. 13600 REM * EQUATION 17  LOGARITHMIC *
  608. 13601 ON ERROR GOTO 62117
  609. 13620 IF NX=1 THEN 14000
  610. 13630 S1=R(21)*R(29)-(R(28)*R(28))
  611. 13640 A(17)=(R(18)*R(29)-R(28)*R(51))/S1
  612. 13650 B(17)=(R(21)*R(51)-R(18)*R(28))/S1
  613. 13660 RR(17)=(A(17)*R(18)+B(17)*R(51)-(R(18)*R(18))/R(21))/(R(19)-(R(18)*R(18))/R(21))
  614. 13670 C(17)=0: RC(17)=1-(((1-RR(17))*(R(21)-1))/(R(21)-2))
  615. 13680 REM * EQUATION 18  RECIPROCAL OF LOGARITHMIC *
  616. 13681 ON ERROR GOTO 62118
  617. 13710 S1=R(21)*R(29)-(R(28)*R(28))
  618. 13720 A(18)=(R(24)*R(29)-R(28)*R(52))/S1
  619. 13730 B(18)=(R(21)*R(52)-R(24)*R(28))/S1
  620. 13740 RR(18)=(A(18)*R(24)+B(18)*R(52)-(R(24)*R(24))/R(21))/(R(25)-(R(24)*R(24))/R(21))
  621. 13750 C(18)=0:RC(18)=1-(((1-RR(18))*(R(21)-1))/(R(21)-2))
  622. 14000 REM * EQUATION 19  HOERL FUNCTION *
  623. 14001 ON ERROR GOTO 62119
  624. 14020 IF NX=1 OR NY=1 THEN 14300
  625. 14030 S1=R(17)*R(21)-(R(16)*R(16))
  626. 14040 S2=R(21)*R(32)-R(28)*R(30)
  627. 14050 S3=R(21)*R(48)-R(16)*R(28)
  628. 14060 S4=R(21)*R(46)-R(16)*R(30)
  629. 14070 S5=R(21)*R(29)-(R(28)*R(28))
  630. 14080 C(19)=(S1*S2-S3*S4)/(S1*S5-(S3*S3))
  631. 14090 S6=(S4-S3*C(19))/S1
  632. 14100 S7=(R(30)-C(19)*R(28)-S6*R(16))/R(21)
  633. 14105 IF S7>87 OR S8>87 THEN A(19)=0:B(19)=0:C(19)=0:GOTO 14150
  634. 14110 B(19)=EXP(S6)
  635. 14120 A(19)=EXP(S7)
  636. 14130 RR(19)=(S7*R(30)+S6*R(46)+C(19)*R(32)-(R(30)*R(30))/R(21))/(R(31)-(R(30)*R(30))/R(21))
  637. 14140 RC(19)=1-(((1-RR(19))*(R(21)-1))/(R(21)-3))
  638. 14150 REM * EQUATION 20  MODIFIED HOERL FUNCTION *
  639. 14151 ON ERROR GOTO 62120
  640. 14180 S1=R(21)*R(23)-(R(22)*R(22))
  641. 14190 S2=R(21)*R(32)-R(28)*R(30)
  642. 14200 S3=R(21)*R(45)-R(22)*R(28)
  643. 14210 S4=R(21)*R(47)-R(22)*R(30)
  644. 14220 S5=R(21)*R(29)-(R(28)*R(28))
  645. 14230 C(20)=(S1*S2-S3*S4)/(S1*S5-(S3*S3))
  646. 14240 S6=(S4-S3*C(20))/S1
  647. 14250 S7=(R(30)-C(20)*R(28)-S6*R(22))/R(21)
  648. 14255 IF S6>87 OR S7>87 THEN A(20)=0:B(20)=0:C(20)=0:GOTO 14300
  649. 14260 A(20)=EXP(S7)
  650. 14270 B(20)=EXP(S6)
  651. 14280 RR(20)=(S7*R(30)+S6*R(47)+C(20)*R(32)-(R(30)*R(30))/R(21))/(R(31)-(R(30)*R(30))/R(21))
  652. 14290 RC(20)=1-(((1-RR(20))*(R(21)-1))/(R(21)-3))
  653. 14300 REM * EQUATION 21  NORMAL DISTRIBUTION *
  654. 14301 ON ERROR GOTO 62121
  655. 14310 IF NY=1 THEN 14460
  656. 14330 S1=R(17)*R(21)-(R(16)*R(16))
  657. 14340 S2=R(21)*R(54)-R(17)*R(30)
  658. 14350 S3=R(21)*R(40)-R(16)*R(17)
  659. 14360 S4=R(21)*R(46)-R(16)*R(30)
  660. 14370 S5=R(21)*R(43)-(R(17)*R(17))
  661. 14380 S6=(S1*S2-S3*S4)/(S1*S5-(S3*S3))
  662. 14390 S7=(S4-S3*S6)/S1
  663. 14400 S8=(R(30)-S7*R(16)-S6*R(17))/R(21)
  664. 14410 A(21)=EXP(S8-((S7*S7)/(4*S6)))
  665. 14420 B(21)=-S7/(2*S6)
  666. 14430 C(21)=1/S6
  667. 14440 RR(21)=(S8*R(30)+S7*R(46)+S6*R(54)-(R(30)*R(30))/R(21))/(R(31)-(R(30)*R(30))/R(21))
  668. 14450 RC(21)=1-(((1-RR(21))*(R(21)-1))/(R(21)-3))
  669. 14460 REM * EQUATION 22  LOG NORMAL DISTRIBUTION *
  670. 14461 ON ERROR GOTO 62122
  671. 14470 IF NX=1 OR NY=1 THEN 14620
  672. 14490 S1=R(21)*R(29)-(R(28)*R(28))
  673. 14500 S2=R(21)*R(57)-R(29)*R(30)
  674. 14510 S3=R(21)*R(55)-R(28)*R(29)
  675. 14520 S4=R(21)*R(32)-R(28)*R(30)
  676. 14530 S5=R(21)*R(56)-(R(29)*R(29))
  677. 14540 S6=(S1*S2-S3*S4)/(S1*S5-(S3*S3)):IF S6=0 THEN 14620: REM Required for QB4 
  678. 14550 S7=(S4-S3*S6)/S1
  679. 14560 S8=(R(30)-S7*R(28)-S6*R(29))/R(21)
  680. 14570 Z=(S8-(S7*S7)/(4*S6)):IF Z>85 THEN 14620 ELSE A(22)=EXP(Z)
  681. 14580 B(22)=-S7/(2*S6)
  682. 14590 C(22)=1/S6
  683. 14600 RR(22)=(S8*R(30)+S7*R(32)+S6*R(57)-(R(30)*R(30))/R(21))/(R(31)-(R(30)*R(30))/R(21))
  684. 14610 RC(22)=1-(((1-RR(22))*(R(21)-1))/(R(21)-3))
  685. 14620 REM * EQUATION 23  BETA DISTRIBUTION *
  686. 14621 ON ERROR GOTO 62123
  687. 14645 IF Q9=1 THEN GOTO 14790
  688. 14650 S1=R(21)*R(29)-(R(28)*R(28))
  689. 14660 S2=R(21)*R(62)-R(30)*R(59)
  690. 14670 S3=R(21)*R(61)-R(28)*R(59)
  691. 14680 S4=R(21)*R(32)-R(28)*R(30)
  692. 14690 S5=R(21)*R(60)-(R(59)*R(59))
  693. 14700 C(23)=(S1*S2-S3*S4)/(S1*S5-(S3*S3))
  694. 14710 B(23)=(S4-S3*C(23))/S1
  695. 14720 S6=(R(30)-B(23)*R(28)-C(23)*R(59))/R(21)
  696. 14730 A(23)=EXP(S6)
  697. 14740 RR(23)=(S6*R(30)+B(23)*R(32)+C(23)*R(62)-(R(30)*R(30))/R(21))/(R(31)-(R(30)*R(30))/R(21))
  698. 14750 RC(23)=1-(((1-RR(23))*(R(21)-1))/(R(21)-3))
  699. 14760 REM * EQUATION 24  GAMMA DISTRIBUTION *
  700. 14761 ON ERROR GOTO 62124
  701. 14765 IF NX=1 OR NY=1 THEN 14960
  702. 14790 S1=R(17)*R(21)-(R(16)*R(16))
  703. 14800 S2=R(21)*R(32)-R(28)*R(30)
  704. 14810 S3=R(21)*R(48)-R(16)*R(28)
  705. 14820 S4=R(21)*R(46)-R(16)*R(30)
  706. 14830 S5=R(21)*R(29)-(R(28)*R(28))
  707. 14840 C(24)=(S1*S2-S3*S4)/(S1*S5-(S3*S3))
  708. 14850 S6=(S4-S3*C(24))/S1
  709. 14860 S7=(R(30)-S6*R(16)-C(24)*R(28))/R(21)
  710. 14865 IF S6<=0 THEN B(24)=0:C(24)=0:GOTO 14960
  711. 14870 B(24)=1/S6
  712. 14880 A(24)=EXP(S7+C(24)*LOG(1/S6))
  713. 14890 RR(24)=(S7*R(30)+S6*R(46)+C(24)*R(32)-(R(30)*R(30))/R(21))/(R(31)-(R(30)*R(30))/R(21))
  714. 14895 RC(24)=1-(((1-RR(24))*(R(21)-1))/(R(21)-3))
  715. 14920 REM * EQUATION 25  CAUCHY DISTRIBUTION *
  716. 14921 ON ERROR GOTO 62125
  717. 14960 S1=R(17)*R(21)-(R(16)*R(16))
  718. 14970 S2=R(21)*R(37)-R(17)*R(24)
  719. 14980 S3=R(21)*R(40)-R(16)*R(17)
  720. 14990 S4=R(21)*R(34)-R(16)*R(24)
  721. 15000 S5=R(21)*R(43)-(R(17)*R(17))
  722. 15010 A(25)=(S1*S2-S3*S4)/(S1*S5-(S3*S3))
  723. 15020 S6=(S4-S3*A(25))/S1
  724. 15030 S7=(R(24)-S6*R(16)-A(25)*R(17))/R(21)
  725. 15040 B(25)=(S6/(2*A(25)))
  726. 15050 C(25)=S7-((S6*S6)/(4*A(25)))
  727. 15060 RR(25)=(S7*R(24)+S6*R(34)+A(25)*R(37)-(R(24)*R(24))/R(21))/(R(25)-(R(24)*R(24))/R(21))
  728. 15070 RC(25)=1-(((1-RR(25))*(R(21)-1))/(R(21)-3))
  729. 15090 PRINT"COEFFICIENTS NOW CALCULATED "
  730. 15100 FOR I=1 TO 25
  731. 15102 IF RR(I)<0 OR RR(I)>1 THEN A(I)=0:B(I)=0:RC(I)=0:C(I)=0:RR(I)=0
  732. 15103 IF RC(I)<0 OR RC(I)>1 THEN RC(I)=0
  733. 15104 NEXT I
  734. 15106 GOTO 4040
  735. 20000 REM * CALCULATE SUMS AND SUMS OF SQUARES *
  736. 20010 NX=0:NY=0
  737. 20040 FOR I=16 TO 65: R(I)=0: NEXT I
  738. 20041 Q9=0:QA=1:GOTO 3430
  739. 20045 FOR I=1 TO 255
  740. 20046 CLS:GOSUB 38000:PRINT"PROCESSING DATA POINT # "; I
  741. 20047 IF X$(1)="END" OR Y$(1)="END" THEN PRINT "NO DATA HAS BEEN ENTERED":PRINT"RETURNING TO MAIN MENU":FOR I1=1 TO 1000:NEXT I1:GOTO 120
  742. 20055 IF X$(I)= "END" OR Y$(I)="END" OR X$(I)="DEL" OR Y$(I)="DEL" GOTO 30000
  743. 20060 X(I)=CDBL(VAL(X$(I))):Y(I)=CDBL(VAL(Y$(I)))
  744. 20065 IF X(I)<0 THEN NX=1
  745. 20066 IF Y(I)<0 THEN NY=1
  746. 20067 IF X(I)=0 THEN X(I)=.0001
  747. 20068 IF Y(I)=0 THEN Y(I)=.0001
  748. 20070 R(16)=R(16)+X(I)
  749. 20080 R(17)=R(17)+X(I)*X(I)
  750. 20090 R(18)=R(18)+Y(I)
  751. 20100 R(19)=R(19)+Y(I)*Y(I)
  752. 20110 R(20)=R(20)+X(I)*Y(I)
  753. 20120 R(21)=I
  754. 20130 R(22)=R(22)+(1/X(I))
  755. 20140 R(23)=R(23)+(1/(X(I)*X(I)))
  756. 20150 R(24)=R(24)+(1/(Y(I)))
  757. 20160 R(25)=R(25)+(1/(Y(I)*Y(I)))
  758. 20170 R(26)=R(26)+(1/(Y(I)*X(I)))
  759. 20180 R(27)=I
  760. 20190 IF NX<>1 THEN R(28)=R(28)+LOG(X(I))
  761. 20200 IF NX<>1 THEN R(29)=R(29)+(LOG(X(I)))*(LOG(X(I)))
  762. 20210 IF NY <>1 THEN R(30)=R(30)+(LOG(Y(I)))
  763. 20220 IF NY<>1 THEN R(31)=R(31)+(LOG(Y(I)))*(LOG(Y(I)))
  764. 20230 IF NX<>1 AND NY<>1 THEN R(32)=R(32)+(LOG(X(I)))*(LOG(Y(I)))
  765. 20240 R(33)=I
  766. 20250 R(34)=R(34)+(X(I)/Y(I))
  767. 20260 R(35)=R(35)+(Y(I)/X(I))
  768. 20270 R(36)=R(36)+((X(I)*X(I)))*Y(I)
  769. 20280 R(37)=R(37)+((X(I)*X(I)))/Y(I)
  770. 20290 R(38)=R(38)+(Y(I)/(X(I)*X(I)))
  771. 20300 R(39)=R(39)+X(I)*(Y(I)*Y(I))
  772. 20310 R(40)=R(40)+(X(I)*X(I)*X(I))
  773. 20320 R(41)=R(41)+1/((X(I)*X(I)*X(I)))
  774. 20330 R(42)=R(42)+(Y(I)*Y(I)*Y(I))
  775. 20340 R(43)=R(43)+(X(I)*X(I)*X(I)*X(I))
  776. 20350 R(44)=R(44)+1/((X(I)*X(I)*X(I)*X(I)))
  777. 20360 IF NX<>1 THEN R(45)=R(45)+LOG(X(I))/X(I)
  778. 20370 IF NY<>1 THEN R(46)=R(46)+X(I)*LOG(Y(I))
  779. 20380 IF NY<>1 THEN R(47)=R(47)+LOG(Y(I))/X(I)
  780. 20390 IF NX<>1 THEN R(48)=R(48)+X(I)*LOG(X(I))
  781. 20400 IF NX<>1 THEN R(49)=R(49)+(X(I)*LOG(X(I)))*(X(I)*LOG(X(I)))
  782. 20410 IF NX<>1 AND NY<>1 THEN R(50)=R(50)+X(I)*LOG(X(I))*LOG(Y(I))
  783. 20420 IF NX<>1 THEN R(51)=R(51)+Y(I)*LOG(X(I))
  784. 20430 IF NX<>1 THEN R(52)=R(52)+LOG(X(I))/Y(I)
  785. 20440 IF NX<>1 THEN R(53)=R(53)+((LOG(X(I))/X(I)))*((LOG(X(I))/X(I)))
  786. 20450 IF NY<>1 THEN R(54)=R(54)+(X(I)*X(I))*LOG(Y(I))
  787. 20460 IF NX<>1 THEN R(55)=R(55)+((LOG(X(I))*LOG(X(I))*LOG(X(I))))
  788. 20470 IF NX<>1 THEN R(56)=R(56)+((LOG(X(I))*LOG(X(I))*LOG(X(I))*LOG(X(I))))
  789. 20480 IF NX<>1 AND NY<>1 THEN R(57)=R(57)+((LOG(X(I))*LOG(X(I))))*LOG(Y(I))
  790. 20490 IF NX<>1 AND NY<>1 THEN R(58)=R(58)+(LOG(Y(I))*LOG(X(I)))/X(I)
  791. 20500 IF X(I)>=1 THEN Q9=1: GOTO 20540
  792. 20501 IF Q9=1 GOTO 20540
  793. 20502 IF X(I)<=0 THEN 20550
  794. 20505 R(59)=R(59)+LOG(1-X(I))
  795. 20510 R(60)=R(60)+(LOG(1-X(I)))*(LOG(1-X(I)))
  796. 20520 R(61)=R(61)+LOG(X(I))*LOG(1-X(I))
  797. 20530 IF NY<>1 THEN R(62)=R(62)+LOG(Y(I))*LOG(1-X(I))
  798. 20540 IF NX<>1 THEN R(63)=R(63)+(LOG(X(I)))/X(I)
  799. 20550 NEXT I
  800. 20600 NX=0:NY=0
  801. 30000 REM * END OF SUMMATION LOOP *
  802. 30030 CLS:GOSUB 38000: PRINT"SUMS HAVE BEEN CALCULATED--NOW CALCULATING COEFFICIENTS": GOTO 12000
  803. 36000 CLS:REM This routine selects Color or Monochrome Monitor
  804. 36005 PRINT TAB(27);"CURVEFIT Version 2.11-B":PRINT" "
  805. 36010 PRINT"This routine allows the selection of Color or Monochrome monitors."
  806. 36020 PRINT" ":PRINT"For most cases, the COLOR choice will be correct.  This choice will work with"
  807. 36030 PRINT"CGA, EGA, and Hercules compatible cards.  Select the MONOCHROME version"
  808. 36040 PRINT"only if the COLOR choice does not work."
  809. 36045 PRINT"MONOCHROME should work with ANY monitor.  With a color monitor, the"
  810. 36046 PRINT"choice of MONOCHROME will yield white text on a black background.":PRINT" "
  811. 36047 PRINT" ":PRINT"When COLOR choice is used for MONOCHROME monitor, display is HIGH INTENSITY."
  812. 36048 PRINT"To use low intensity on MONOCHROME monitor, choose MONOCHROME monitor."
  813. 36050 PRINT" ":PRINT "Please press <C> or <ENTER> for COLOR.  Press <M> for MONOCHROME.  "
  814. 36060 PRINT" ":MONITOR$="C"
  815. 36061 MONITOR1$=INKEY$:IF MONITOR1$="m" OR MONITOR1$="M" OR MONITOR1$="C" OR MONITOR1$="c" OR MONITOR1$=CHR$(13) THEN 36110 ELSE 36061
  816. 36110 IF MONITOR1$="C" OR MONITOR1$="c" OR MONITOR1$=CHR$(13) THEN PRINT"You have chosen COLOR monitor":PRINT" ":MONITOR$="C":INPUT"Press <Enter> to Continue";CT$:IF MONITOR2$="Y" THEN MONITOR2$="N":GOTO 10
  817. 36115 IF MONITOR1$="C" OR MONITOR1$="C" OR MONITOR1$=CHR$(13) THEN 115
  818. 36120 IF MONITOR1$="M" OR MONITOR1$="m" THEN PRINT"You have chosen MONOCHROME monitor":PRINT" ":MONITOR$="M":INPUT"Press <Enter> to Continue";CT$:IF MONITOR2$="Y" THEN MONITOR2$="N":GOTO 10
  819. 36125 IF MONITOR1$="M" OR MONITOR1$="m" THEN 115
  820. 36130 GOTO 36010
  821. 38000 IF MONITOR$="M" THEN 38100
  822. 38010 COLOR 15,1,0:RETURN
  823. 38100 COLOR 7,0,0:RETURN
  824. 40000 REM * LIST REGISTER CONTENTS R16-R63 *
  825. 40010 CLS
  826. 40025 CLS:GOSUB 38000:PRINT"REGISTER CONTENTS:":PRINT" ":PRINT"REG#";TAB(10);"REGISTER";TAB(34);"REGISTER +1";TAB(57);"REGISTER +2":PRINT" ":FOR I=16 TO 63 STEP 3
  827. 40095 PRINT I;TAB(5);R(I);TAB(29);R(I+1);TAB(54);R(I+2)
  828. 40100 NEXT I
  829. 40105 PRINT" "
  830. 40120 INPUT "PLEASE PRESS ENTER TO CONTINUE ";A$
  831. 40122 INPUT"OUTPUT TO PRINTER (Y)ES OR (N)O ";A$
  832. 40124 IF LEFT$(A$,1)="Y" OR LEFT$(A$,1)="y" THEN 40126 ELSE GOTO 120
  833. 40126 FOR I=16 TO 63 STEP 2
  834. 40127 LPRINT "R(";I;")= ";R(I);TAB(40);"R(";I+1;")= ";R(I+1)
  835. 40128 NEXT I
  836. 40129 LPRINT CHR$(12):GOTO 120
  837. 42000 CLS:GOSUB 38000:IF A(1)=0 AND B(1)=0 THEN PRINT"COEFFICIENTS MUST BE CALCULATED BEFORE USING THIS ROUTINE!":PRINT" ":INPUT"PLEASE PRESS <ENTER> TO RETURN TO MAIN MENU";RMM$:GOTO 120
  838. 42010 FOR I=1 TO 25:RS$(I)=STR$(RC(I))+"_"+STR$(I):NEXT I
  839. 42015 REM SHELL-METZNER SORT
  840. 42020 MAX=25
  841. 42025 M1=MAX
  842. 42030 M1=M1\2:IF M1=0 THEN 43000
  843. 42040 K1=MAX-M1:J1=1
  844. 42050 I1=J1
  845. 42060 L1=I1+M1
  846. 42070 IF RS$(I1)<=RS$(L1) THEN J1=J1+1:IF J1>K1 THEN 42030 ELSE 42050 ELSE 42080
  847. 42080 SWAP RS$(I1),RS$(L1):I1=I1-M1:IF I1>0 THEN 42060
  848. 42090 J1=J1+1:IF J1>K1 THEN 42030 ELSE 42050
  849. 43000 '
  850. 43310 '
  851. 43320 K2=25:FOR I=1 TO 25:RS1$(I)=RS$(K2):K2=K2-1:NEXT I
  852. 43330 FOR I=1 TO 25:RS$(I)=RS1$(I):NEXT I
  853. 43340 FOR I=1 TO 25:P1=INSTR(RS$(I),"_"):RS(I)=VAL(MID$(RS$(I),P1+2,LEN(RS$(I)))):NEXT I
  854. 43350 REM WAS GOSUB 38000
  855. 43507 PRINT "╔═══════════╦═══════════════════════════════════════════════════╦═════════════╗"
  856. 43508 PRINT "║ CURVEFIT  ║ SORTED LISTING OF EQUATIONS for CORRECTED R² >0.10║VERSION 2.11B║"
  857. 43509 PRINT "╠════╤══════╩═════╤════════════╤════════════╤══════╤══════╤═════╩═════════════╣"
  858. 43510 PRINT "║EQ #│ 'A' COEF.  │ 'B' COEF.  │ 'C' COEF.  │ R²   │R² COR│ EQUATION OF CURVE ║"
  859. 43511 PRINT "╟────┼────────────┼────────────┼────────────┼──────┼──────┼───────────────────╢"
  860. 43512 FOR I=1 TO 18:PRINT "║    │            │            │            │      │      │                   ║":NEXT I
  861. 43517 PRINT "╚════╧════════════╧════════════╧════════════╧══════╧══════╧═══════════════════╝";
  862. 43518 C1$="#.####":C2$="#######.####":C3$="###"
  863. 43524 MR=6:
  864. 43526 FOR I=1 TO 25
  865. 43527 IF RC(RS(I))<=.1 THEN 43531
  866. 43528 LOCATE MR,2:PRINT USING C3$;RS(I);:LOCATE MR,7:GOSUB 43715:PRINT USING C2$;A(RS(I)):LOCATE MR,20:GOSUB 43720:PRINT USING C2$;B(RS(I));:LOCATE MR,33:GOSUB 43725:PRINT USING C2$;C(RS(I));
  867. 43529 LOCATE MR,46:PRINT USING C1$;RR(RS(I));:LOCATE MR,53:PRINT USING C1$;RC(RS(I));:LOCATE MR,60:PRINT EQ$(RS(I));
  868. 43530 MR=MR+1:IF MR=24 THEN 43532
  869. 43531 NEXT I
  870. 43532 LOCATE 25,1:INPUT"PLEASE PRESS <ENTER> TO RETURN TO MAIN MENU";RMM$:GOTO 120
  871. 43715 IF A(RS(I))>9999999.9999# OR A(RS(I))<-999999.9999# THEN C2$="##.#####^^^^" ELSE C2$="#######.####"
  872. 43717 RETURN
  873. 43720 IF B(RS(I))>9999999.9999# OR B(RS(I))<-999999.9999# THEN C2$="##.#####^^^^" ELSE C2$="#######.####"
  874. 43722 RETURN
  875. 43725 IF C(RS(I))>9999999.9999# OR C(RS(I))<-999999.9999# THEN C2$="##.#####^^^^" ELSE C2$="#######.####"
  876. 43727 RETURN
  877. 50000 IF LEFT$(Q1$,1)="Y" OR LEFT$(Q1$,1)="y" THEN LP=1 ELSE LP=0
  878. 50010 RETURN
  879. 55000 EQ$(1)="Y=A+B*X":EQ$(2)="Y=B*X":EQ$(3)="Y=1/(A+B*X)":EQ$(4)="Y=A+B*X+C/X":EQ$(5)="Y=A+B/X":EQ$(6)="Y=X/(A*X+B)"
  880. 55010 EQ$(7)="Y=A+B/X+C/X*X":EQ$(8)="Y=A+B*X+C*X*X":EQ$(9)="Y=A*X+B*X*X":EQ$(10)="Y=A*X^B":EQ$(11)="Y=A*B^X"
  881. 55020 EQ$(12)="Y=A*B^(1/X)":EQ$(13)="Y=A*X^(B*X)":EQ$(14)="Y=A*X^(B/X)":EQ$(15)="Y=A*e^(B*X)":EQ$(16)="Y=A*e^(B/X)"
  882. 55030 EQ$(17)="Y=A+B*lnX":EQ$(18)="Y=1/(A+B*lnX)":EQ$(19)="Y=A*B^X*X^C":EQ$(20)="Y=A*B^(1/X)*X^C"
  883. 55040 EQ$(21)="Y=A*e^(((X-B)^2)/C)":EQ$(22)="Y=A*e^((lnX-B)^2/C)":EQ$(23)="Y=A*X^B*(1-X)^C":EQ$(24)="Y=A*(X/B)^C*e^(x/b)"
  884. 55050 EQ$(25)="Y=1/(A*(X+B)^2+C)":RETURN
  885. 57000 CLS:PRINT"You have chosen to store predicted values to a Disk File"
  886. 57010 PRINT:INPUT "Enter File Name for Data Storage (Include Drive Designator) ",PF$
  887. 57020 PRINT:PRINT"File Name for Predicted Data Storage is ";PF$
  888. 57030 PRINT:INPUT"Is this correct (Y) or (N): (A) to Abort";PF1$
  889. 57040 IF LEFT$(PF1$,1)="Y" OR LEFT$(PF1$,1) = "y" THEN GOTO 57050 ELSE IF LEFT$(PF1$,1)="A" OR LEFT$(PF1$,1)="a" THEN GOTO 120 ELSE GOTO 57000
  890. 57050 OPEN "O",1,PF$:GOTO 5007
  891. 57200 CLS:GOTO 5007
  892. 61000 IF (ERR=53 OR ERR=64) AND ERL=7050 THEN PRINT "UNABLE TO FIND OR ILLEGAL FILE NAME ";A4$:INPUT "PRESS <ENTER> TO CONTINUE";A$:RESUME 120
  893. 62101 GOSUB 62150:RESUME 12060
  894. 62102 GOSUB 62150:RESUME 12140
  895. 62103 GOSUB 62150:RESUME 12220
  896. 62104 GOSUB 62150:RESUME 12320
  897. 62105 GOSUB 62150:RESUME 12400
  898. 62106 GOSUB 62150:RESUME 12470
  899. 62107 GOSUB 62150:RESUME 12590
  900. 62108 GOSUB 62150:RESUME 12720
  901. 62109 GOSUB 62150:RESUME 12810
  902. 62110 GOSUB 62150:RESUME 13000
  903. 62111 GOSUB 62150:RESUME 13110
  904. 62112 GOSUB 62150:RESUME 13210
  905. 62113 GOSUB 62150:RESUME 13300
  906. 62114 GOSUB 62150:RESUME 13400
  907. 62115 GOSUB 62150:RESUME 13500
  908. 62116 GOSUB 62150:RESUME 13600
  909. 62117 GOSUB 62150:RESUME 13680
  910. 62118 GOSUB 62150:RESUME 14000
  911. 62119 GOSUB 62150:RESUME 14150
  912. 62120 GOSUB 62150:RESUME 14300
  913. 62121 GOSUB 62150:RESUME 14460
  914. 62122 GOSUB 62150:RESUME 14620
  915. 62123 GOSUB 62150:RESUME 14760
  916. 62124 GOSUB 62150:RESUME 14920
  917. 62125 GOSUB 62150:RESUME 15090
  918. 62150 REM This subroutine zeroes out all coefficients for equations with errors
  919. 62160 A(I)=0:B(I)=0:C(I)=0:RR(I)=0:RC(I)=0:RETURN
  920. 63000 IF ERR=64 AND ERL=6050 THEN PRINT" THE FILE NAME ";A4$;" IS NOT A VALID FILE NAME":INPUT"PRESS <ENTER> TO CONTINUE";A$:RESUME 120
  921. 63500 IF D1>21 THEN D1=8 ELSE IF D1<8 THEN D1=21
  922. 63505 FLAG=0:LOCATE D1,11,1,0,7
  923. 63510 D1=CSRLIN
  924. 63520 A$=INKEY$:IF A$=CHR$(13) THEN 63560 ELSE IF A$="8" THEN D1=D1-1:GOTO 63500
  925. 63521 IF A$=CHR$(27) THEN 8000 ELSE IF A$="2" THEN D1=D1+1:GOTO 63500
  926. 63523 IF LEN(A$)=2 THEN A$=RIGHT$(A$,1) ELSE GOTO 63500
  927. 63525 IF A$="H" THEN D1=D1-1:GOTO 63500
  928. 63526 IF A$="P" THEN D1=D1+1:GOTO 63500
  929. 63527 IF A$>=";" AND A$<="D" THEN FLAG=1: GOTO 63560
  930. 63528 IF A$>="T" AND A$<="W" THEN FLAG=1: GOTO 63560
  931. 63529 GOTO 63500
  932. 63530 D1=D1+1:GOTO 63500
  933. 63560 D1=CSRLIN
  934. 63564 IF FLAG=1 THEN 63675
  935. 63565 IF CSRLIN=8 THEN 110
  936. 63570 IF CSRLIN=9 THEN 7030
  937. 63580 IF CSRLIN=10 THEN 2000
  938. 63590 IF CSRLIN=11 THEN 3000
  939. 63600 IF CSRLIN=12 THEN 9005
  940. 63610 IF CSRLIN=13 THEN 4000
  941. 63620 IF CSRLIN=14 THEN 4990
  942. 63630 IF CSRLIN=15 THEN 10000
  943. 63640 IF CSRLIN=16 THEN 4040
  944. 63645 IF CSRLIN=17 THEN 40025
  945. 63650 IF CSRLIN=18 THEN 6030
  946. 63655 IF CSRLIN=19 THEN 8000
  947. 63660 IF CSRLIN=20 THEN 42000
  948. 63665 IF CSRLIN=21 THEN 36000
  949. 63670 GOTO 63500
  950. 63675 IF A$=";"  THEN 110
  951. 63676 IF A$="<" THEN  7030
  952. 63677 IF A$="=" THEN 2000
  953. 63678 IF A$=">" THEN 3000
  954. 63679 IF A$="?" THEN 9005
  955. 63680 IF A$="@" THEN 4000
  956. 63681 IF A$="A" THEN 4990
  957. 63682 IF A$="B" THEN 10000
  958. 63683 IF A$="C" THEN 4040
  959. 63684 IF A$="D" THEN 40025
  960. 63685 IF A$="T" THEN 6030
  961. 63686 IF A$="U" THEN 8000
  962. 63687 IF A$="V" THEN 42000
  963. 63688 IF A$="W" THEN 36000
  964. 63690 GOTO 63500
  965. 63700 CLS:GOSUB 38000:PRINT"DATA CORRECTION":PRINT" "
  966. 63711 CLS:GOSUB 38000:M=1:MR=1:MC=1:MR1=1:MC1=1
  967. 63712 PRINT "╔═══════════╤══════════════════════════════════════════════════════╤══════════╗"
  968. 63713 PRINT "║ CURVEFIT  │ DATA LIST OF X AND Y VALUES  NOW IN MEMORY           │VERS 2.11B║"
  969. 63716 PRINT "╟───┬───────┴──┬──────────┬───┬──────────┬──────────┬───┬──────────┼──────────╢"
  970. 63717 PRINT "║PT#│ X VALUE  │ Y VALUE  │PT#│ X VALUE  │ Y VALUE  │PT#│ X VALUE  │ Y VALUE  ║"
  971. 63718 PRINT "╟───┼──────────┼──────────┼───┼──────────┼──────────┼───┼──────────┼──────────╢"
  972. 63719 FOR I6=1 TO 18:PRINT "║   │          │          │   │          │          │   │          │          ║"
  973. 63720 NEXT I6
  974. 63735 PRINT "╚═══╧══════════╧══════════╧═══╧══════════╧══════════╧═══╧══════════╧══════════╝";
  975. 63736 DUMMY$="          ":QZ=1:GOSUB 3470:QZ=0:FOR J=1 TO 255
  976. 63737 IF X$(J)<>"END" OR Y$(J)<>"END" THEN 63746 ELSE 63800
  977. 63746 LOCATE 5+MR,MC+1:PRINT USING "###";M;
  978. 63748 LOCATE 5+MR,MC+5:XX1=VAL(X$(M)):GOSUB 4780
  979. 63749 PRINT USING C5$;XX1;
  980. 63750 LOCATE 5+MR,MC+16:YY1=VAL(Y$(M)):GOSUB 4790
  981. 63751 PRINT USING C5$;YY1;
  982. 63752 MR=MR+1
  983. 63753 IF M MOD 18=0 THEN MR=1:MC=MC+26
  984. 63754 IF M MOD 54=0 THEN MR=1:MC=1:GOTO 63800
  985. 63777 M=M+1
  986. 63780 NEXT J
  987. 63800 LOCATE 25,1:PRINT"PLEASE PRESS <ENTER> FOR MORE DATA ";:INPUT ;A$:IF M<255 AND X$(J)<>"END" THEN 63900 ELSE GOTO 9008
  988. 63900 DUMMY$="            ":FOR J9=1 TO 54: REM This routine blanks screen for DATA LIST
  989. 63910 LOCATE 5+MR1,MC1+1:PRINT LEFT$(DUMMY$,3);:LOCATE 5+MR1,MC1+5:PRINT LEFT$(DUMMY$,10);:LOCATE 5+MR1,MC1+16:PRINT LEFT$(DUMMY$,10);
  990. 63920 MR1=MR1+1:IF J9 MOD 18=0 THEN MR1=1:MC1=MC1+26
  991. 63930 IF J9 MOD 54=0 THEN MR1=1:MC1=1
  992. 63940 NEXT J9
  993. 63950 GOTO 63777
  994. 64000 DUMMY$="            ":MR1=1:MC1=1: REM This routine blanks screen for ADD and DELETION routines
  995. 64001 LOCATE 25,1,0,1,7:COLOR 0,7,0:PRINT"Data Screen is FULL.  Press <ENTER> to clear for more data";:INPUT;A$:LOCATE 25,1,0,1,7:GOSUB 38000:PRINT"                                                                               ";
  996. 64005 FOR J9=1 TO 42
  997. 64010 LOCATE 7+MR1,MC1+1:PRINT LEFT$(DUMMY$,3);:LOCATE 7+MR1,MC1+5:PRINT LEFT$(DUMMY$,10);:LOCATE 7+MR1,MC1+16:PRINT LEFT$(DUMMY$,10);
  998. 64020 MR1=MR1+1:IF J9 MOD 14 = 0 THEN MR1 =1:MC1=MC1+26
  999. 64030 IF J9 MOD 42 = 0 THEN MR1=1:MC1=1
  1000. 64035 NEXT J9
  1001. 64040 RETURN
  1002.